前进中的蜗牛

番茄大叔

水滴穿石,非一日之功;没有量变,何来质变。

UML类图

最近抽时间整理下设计模式。何为设计模式?设计模式的官方定义:代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。个人对设计模式的理解:

  • 设计模式是针对面向对象的(或基于对象的)。(所以我们写的面向过程式的代码,往往感觉无处下手使用设计模式)
  • 对于某一类问题,解决方案的总结

UML 类图

UML类图是类与类之间的关系设计图。掌握UML类图,更容易学习设计模式(设计模式就是有效的组织类与类之间的关系)。
下面展示UML类图中类与类(或接口)之间的6种关系,以及对应到C#中的代码结构。

泛化关系(generalization)

语义:类与类的继承关系。继承关系为 is-a的关系;两个对象之间如果可以用 is-a 来表示,就是继承关系。如猫cat是动物animal。

C#代码体现为继承类

public class Animal
{
}
public class Cat : Animal
{
}

实现关系(realize)

语义:类之间Can的关系,有“契约”、“能力”或“功能”的意思。如鸭子有游泳的“能力”:

C#代码体现为继承接口

public interface ISwim 
{
	void Swim();
}

public class Duck : ISwim
{
	public virtual void Swim()
	{
		throw new System.NotImplementedException();
	}
}

聚合关系(aggregation)

语义:整体由个体构成。如班级由学生构成(班级为整体,学生为个体)。

注意菱形箭头方向
C#代码体现为一个类包含另一个类的集合成员

public class Student
{
}
public class Class
{
	public virtual IEnumerable<Student> Student
	{
		get;
		set;
	}
}

组合关系(composition)

语义:整体由部分构成,强依赖的特殊聚合关系,对整体来说部分必须存在。如汽车离开轮胎就不可正常驾驶,聚合关系的依赖没有那么强,如少一个学生照样可以上课。

C#代码体现为一个类包含另一个类的集合成员

public class Tyre
{
}

public class Car
{
	public virtual IEnumerable<Tyre> Tyre
	{
		get;
		set;
	}
}

关联关系(association)

语义:不同类对象之间的结构关系(一种静态关系,与运动状态无关)

C#代码体现为:一个类包含另一个类的成员。

public class Ticket
{
}

public class Passenger
{
	public virtual Ticket Ticket
	{
		get;
		set;
	}
}

依赖关系(dependency)

语义:一个对象在运行期间会用到另一个对象

C#代码体现为:一个类中的函数的参数或内部包含另一个类。

public class Bike
{
}
public class Person
{
	public virtual void GoToSubline(Bike bike)
	{
		throw new System.NotImplementedException();
	}
}

结束语

接下来开始一系列设计模式的总结。关于是否需要学习设计模式可谓众说纷纭,我认为还是必要的,但是千万不要用死。

  1. 面试中经常被问到(这个估计是加分项)
  2. 阅读大牛代码更容易(理清关系一个生动的设计模式名字就能清楚程序结构)
  3. 为自己成为大牛做准备(先对设计模式有个印象,慢慢自己真正掌握了再用)
posted @ 2018-01-22 18:25  LoveTomato  阅读(200)  评论(0编辑  收藏  举报