初衷
在写本文之前,一直在学习设计模式,但是有一个问题,看完的内容,过几天就忘记了,顾从头再来一次,顺便做个记录。
场景
我们有一个 duck 类,需求是,该鸭子 会飞,会叫,还会游泳
@interface Duck{
- (void) fly{}
- (void)quack{}
- (void)swim{}
}
看起来不错,可是等需求发生变化,我们要有不同种类的鸭子有不同的行为。那怎么办?
使用继承? 所有子类均继承Duck,可是我们想要旱鸭子,不能swim啊,我们可能还需要会飞的鸭子,不会叫的鸭子,怎么版,怎么版?怎么版?
哦哦,对了,面向接口编程啊
嗯,看起来还不错哦,但是,但是你不觉得重复的代码会立马变得很多很多!!! 都是有飞的行为,为毛让我每一个类都重复写!!!
是不是觉得很恐怖,这时候我们停下笔,想一想,我们这是怎么啦,为毛老天爷出处与我做对,不就是一个代码吗
设计原则:
把变化的部分取出来封装起来,其他部分不受影响,代码变化引起的其他后果就会变少,系统就变得更有弹性
@interface Duck {
@property FlyBehavior flyBehavior
@property QuachBehavior quackBehavior
- (void) swim{}
- (void)display{}
- (void)performFly{
self.flyBehavior.fly()
}
- (void)performQuack{
self.quackBehavior.quack()
}
}