设计模式中依赖和聚合关系的体现形式和具体用法(c#)

序:本篇为前段时间的个人总结,如果对我的总结有异议请在回复中指出

1依赖

在软件设计中,依赖关系一般体现在了继承上,所以以下就对继承的几个方面讲讲。

1.1接口

在c#中,通过关键字Interface实现,其作用是继承与接口的类必须提供接口内方法的实。

接口的作用有几点:1多继承2通过多态限制外部访问的内容

一般而言作为多继承的时候是属于结构上的需求,结构上的东西都是一开始就计划好了,然后再书写,所以这种接口会出现在项目初期,也就是编码的最开始

例如:水果是植物,水果是食物

如果水果同时集成了食物和植物的特性,由于C#机制不允许水果对多个类进行继承

这个时候就会用到植物的接口或者是食物的接口

而作为限制外部访问的接口属于功能型的接口,这种接口一般都是在后期出现的,而其原因大致如下

例如我们有一个动物对象:狗 他有很多动作 吃(eat()),休息(sleep()),散步(walk())。。。。。。

而我想把吃(eat())这个功能交给饲养员来处理,我又不想让饲养员知道能够调用休息(sleep()) ,散步(walk())这些方法

这时候我就只有给饲养员一个接口(喂食)调用吃(eat())这个方法

很显然,这个是因为有要提供给饲养员给狗(喂食) 这个功能 才会出现对外提供一个为(喂食)的接口

属于结构范围之外的,所以这个一般是在编码完成之后,维护期出现的。

 

1.2抽象类

在c#中,通过关键字abstract实现,其作用可以提供和接口一样的功能,还能提供方法的实现,缺点在于不能多重继承。

在功能上抽象类和接口的区别仅仅在于:接口可以多重继承,而抽象类不行,接口不能提供方法的实现,而抽象类可以提供实现。

其主要作用体现在:为代码复用和抽象接口提供可能。

本质上:抽象类是结构级的。

1.3实体类

在功能少和抽象类的区别是少了可以抽象的部分,类下的方法都包含实现。

并不包含抽象部分。

1.4区别和联系

在功能上的区别和联系

多重继承 方法的实现 方法的抽象
接口 可以 不行 可以
抽象类 不行 可以 可以
实体类 不行 可以 不行

应用上的区别和联系

  • 接口:在结构上提供了多重继承的可能,同时也能让外部调用方法影响达到最小化。不过接口多用于外部的调用,使外部调用变得灵活,在继承的特性上不强求父与子的关系。
  • 抽象类:在结构上提供了抽象和实现同时存在的可能,在抽象方法里的实现功能多体现于让子类对其方法的复用,达到代码的精炼,而在抽象方面体现的是接口的特性,让子类来提供实现,而自己制定标准。在继承的特性上强调父与子的关系。
  • 实体类:一般在结构的最末级,用于实现功能。

2聚合

2.1关联

关联,表示就是一个简单的引用,只体现一种引用的关系。

如:class A中引用了class B、C、D的实例。 

2.2聚合

聚合,表示整体和部分的关系。

如:class A中包含了几个部分:B、C、D,它们之间的关系比较弱,也就是说A对象不存在了,但是B、C、D对象仍然可以存在。

2.3复合

复合,表示是一种特殊的聚合,更多表示的是一种“拥有”的关系。

如class A中包含了几个部分:B、C、D,它们之间的关系比较强,如果A对象不存在了,则B、C、D对象也会不存在;如果拷贝了A对象,则B、C、D对象也会跟着一起拷贝。

2.4区别和联系

A存在BCD存在 A存在BCD不存在 A不存在BCD存在
关联 可以 可以 可以
聚合 可以 不可以 可以
复合 可以 不可以 不可以

3依赖和聚合的关系及其区别

在用法上,接口和聚合没有交叉点,这2者的交叉点主要表现在了特性是由继承来表现还是由组合来表现。

在设计上继承强调的是复用,而组合强调的是变化。

继承表示的状态和类的数量关系为加的关系,及类的数量等于自后表现的状态的总和,而组合表现的状态和类的关系为,如果聚合的类为n1,n2...,每个类的种类为Na1,Na2...那么最终表示的状态的总类为相称的关系,及状态=(n1×Na1)×(n2×Na2)。。。。这点区别可以在桥接模式里体现出来。

参考文献:

.NET设计模式系列文章                作者:李会军

Head First 设计模式(中文版)

 

posted @ 2008-09-24 22:46  小眼睛老鼠  阅读(1703)  评论(0编辑  收藏  举报