1 前言
最近新工作太忙了,好久没有写博客了,经过一段时间的编码,发现自己写的代码真的是太差劲了,难维护,扩展性低,重复代码过多。自己分析分析总结一下,发现是自己缺少了一项优秀程序员的技能--设计模式,所以最近打算充充电,和大家一起学习一下设计模式,有问题之处请大家指点一二。
转载请注明出处:http://blog.csdn.net/developer_zhang
2 详述
在学习面向对象之前,我们来一起温习一下面向对象的基础知识吧:
在面向对象设计模式中,类与类之间主要有5种关系,他们分别是:依赖、关联、聚合、组合、继承。他们的耦合度依次增强。
2.1 依赖(Dependence) ![](http://hi.csdn.net/attachment/201201/9/0_13260908301gJS.gif)
依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。定义比较晦涩难懂,但在面向对象中的表现还是比较直观的:类A当中使用了类B,其中类B是作为类A的方法参数、方法中的局部变量、或者静态方法调用。类上面的图例中:People类依赖于Book类和Food类,Book类和Food类是作为类中方法的参数形式出现在People类中的。
代码实例:
- #import "People.h"
- @implementation People
- //Book作为read方法的形参
- -(void)read:(Book*) book{
- NSLog(@"读的书是:%@",book.name);
- }
- @end
2.2关联(Association)
、
、![](http://hi.csdn.net/attachment/201201/9/0_1326091028sK6k.gif)
单向关联:
双向关联:
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。关联关系分为单向关联和双向关联。在java中,单向关联表现为:类A当中使用了类B,其中类B是作为类A的成员变量。双向关联表现为:类A当中使用了类B作为成员变量;同时类B中也使用了类A作为成员变量。
代码实例:
- #import "Father.h"
- @implementation Father
- @synthesize name;
- @synthesize son;
- -(Father*)init
- {
- self=[super init]; //先使用父类方法进行初始化
- if (self!=nil) {
- son = [[Son alloc] init];
- }
- return self;
- }
- @end
- #import "Son.h"
- #import "Father.h"
- @implementation Son
- @synthesize name;
- @synthesize father;
- -(Son*)init
- {
- self=[super init]; //先使用父类方法进行初始化
- if (self!=nil) {
- // father = [[Father alloc] init];
- }
- return self;
- }
- @end
2.3 聚合(Aggregation)![](http://hi.csdn.net/attachment/201201/9/0_132609129950Sp.gif)
代码实例:
- #import "People.h"
- @implementation People
- @synthesize car;
- -(void)setCar:(Car *)inputCar
- {
- self.car = inputCar;
- }
- -(void)drivingCar
- {
- NSLog(@"车的型号是%@",car.type);
- }
- @end
2.4 组合(Composition)![](http://hi.csdn.net/attachment/201201/9/0_1326091487YvWr.gif)
代码实例:
- //组合
- @synthesize body;
- -(People*)init
- {
- self = [super init];
- if (self!=nil) {
- body = [[Body alloc] init];
- }
- return self;
- }
- -(void)eat
- {
- NSLog(@"吃饭用身体:%@",body.name);
- }
2.5 继承(Generalization)![](http://hi.csdn.net/attachment/201201/9/0_1326091748FS48.gif)
继承代码比较简单,这里就不附加代码了。
代码下载地址:http://download.csdn.net/detail/u010013695/6942183
3 结语
以上就是设计模式基础知识的所有内容,欢迎大家共同切磋交流,一起进步,十分感谢!