Head First 设计模式

图片发自App

初衷

在写本文之前,一直在学习设计模式,但是有一个问题,看完的内容,过几天就忘记了,顾从头再来一次,顺便做个记录。

场景

我们有一个 duck 类,需求是,该鸭子 会飞,会叫,还会游泳

@interface Duck{
- (void) fly{}
- (void)quack{}
- (void)swim{}
}

看起来不错,可是等需求发生变化,我们要有不同种类的鸭子有不同的行为。那怎么办?
使用继承? 所有子类均继承Duck,可是我们想要旱鸭子,不能swim啊,我们可能还需要会飞的鸭子,不会叫的鸭子,怎么版,怎么版?怎么版?

哦哦,对了,面向接口编程啊

Head First 设计模式_第1张图片
这个设计咋样?

嗯,看起来还不错哦,但是,但是你不觉得重复的代码会立马变得很多很多!!! 都是有飞的行为,为毛让我每一个类都重复写!!!
是不是觉得很恐怖,这时候我们停下笔,想一想,我们这是怎么啦,为毛老天爷出处与我做对,不就是一个代码吗
设计原则:
把变化的部分取出来封装起来,其他部分不受影响,代码变化引起的其他后果就会变少,系统就变得更有弹性

 @interface Duck {
 @property FlyBehavior flyBehavior
@property QuachBehavior quackBehavior
- (void) swim{}
- (void)display{}
- (void)performFly{
  self.flyBehavior.fly()
}
- (void)performQuack{
 self.quackBehavior.quack()
}

}

你可能感兴趣的:(Head First 设计模式)