首页 > 代码库 > 设计模式中的关系在代码中的实现
设计模式中的关系在代码中的实现
我们都学过UNL,其中类图中有6类关系:泛华(继承)、实现、关联、组合、聚合、依赖。由于他们之间也存在各种联系,我就将他们分为了4大类:依赖、关联、继承、实现。
整理如图:
从这个图中,我们就可以看出我是如何划分的了:聚合和组合是关联的特殊形式,所以就这样划分了。
我们知道,这6个关系的耦合的耦合度:继承=实现<依赖<关联<聚合<组合。
那么下一步,我们就看看,他们在设计模式的代码中是怎样实现的。
1、依赖关系
依赖关系的定义很绕口,其实说白了就是:一个对象依赖于另一个对象的服务。在C#中的实现很简单就是:A依赖于B对象,那么B对象大多数情况下是A对象的方法参数、方法局部变量或者是静态方法调用。
举个例子:
植物的生长需要水和阳光,就是依赖关系。阳光和水是植物的吸收和吸取方法的参数。用C#代码实现就是:
public class Plant { public void absort(Sunshine sun) { Console.Write("吸收阳光"); } public void ShutUp(Water water) { Console.Write("吸收水分"); } }
2、关联
对于两个相对独立的对象,当一个对象的实例与另一个对象的额特定实例存在固定的对应关系。关联表现为:类A当中使用了类B作为成员变量。
如上图,代码实现为:
public class Son { Father father = new Father(); public void getGift() { Console.Write("从" + father.getname()+"获得礼物"); } }
3、聚合
聚合是特殊的关联,反映了“整体”-"部分"的关系。
聚合关系耦合度强于关联,他们的代码表现是相同的,仅仅是在语义上有所区别:聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。
代码实现:
public class People{ Car car; House house; //聚合关系中作为成员变量的类一般使用set方法赋值 public void setCar(Car car){ This.car = car; } public void setHouse(House house){ This.house = house; } public void driver(){ <span style="font-family:Arial;"></span><pre name="code" class="csharp"> Console.Write(“车的型号:”+car.getType()); } public void sleep(){ <pre name="code" class="csharp"> Console.Write(“我在房子里睡觉:”+house.getAddress()); } }
4、组合
组合是一种特殊的关联,耦合度比聚合大,代码实现相同,要理解,不同点在于:是组合中的“整体”是不能缺少“部分”。
代码实现是:
<span style="font-size:18px;"> public class Body { Ear ear =new Ear; Eyes eyes =new Eyes; public void listen(){ Console.Write("身体需要"+ ear.getname()+"来听"); } public void sleep(){ Console.Write("睡觉时需要"+ ear.getname()+"闭上"); } }</span>
5、继承
继承分为两种一种是继承抽象类,一种是实现接口。两个的区别是:
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。
第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
第二点. 接口可以多继承,抽象类不行
第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
第四点. 接口中基本数据类型为static 而抽类象不是的。
6、实现
实现的耦合度和继承是相同的,实现就是一个类去实现一个或多个接口。接口定义方法,类去实现方法,就是这样。
ok,关于继承和实现的代码其实很简单,使用了关键字,各种语言的关键字不同。
总结:
关于设计模式,如果不知道UML图中的关系是怎样实现的,那么就等于完全处于架空状态。设计模式需要我们不但要看懂UML图,还要会灵活应用,这是设计模式的基础。