设计模式-笔记(二)
抽象类:Animal 具体实现Dog和Cat
针对实现编程:
Dog d = new Dog();
d。bark();
?
针对接口/超类型编程
Animal animal = new Dog();
animal。makeSound();
?
整合鸭子的行为
?
关键在于,鸭子现在会将飞行和呱呱叫的动作”委托“(delegate)别人处理,而不是使用定义在Duck类(或子类)内的呱呱叫和飞行方法。
?
Duck.java
FlyBehavior flyBehavior
QuackBehavior quackBehavior
?
performQuack(){
?quackBehavior.quack();
}
swim()
display()
performFly(){
...
}
?
想进行呱呱叫的动作,Duck对象只要叫quackBehavior对象去呱呱叫就可以了。在这部分的代码中,我们不在乎quackBehavior接口的对象到底是什么,我们只关心该对象知道如何进行呱呱叫就够了。
?
public class MallardDuck extends Duck{
??? public MallardDuck(){
??????? quackBehavior?= ?new Quack();//绿头鸭使用Quack类处理呱呱叫,所以当performQuack()被调用时,叫的职责被委托给Quack对象,而我们得到了真正的呱呱叫。
??????? flyBehavior??=????new FlyWithWings();
?
}
}
?
wait,你不是说过我们将不对具体实现编程吗?但是我们在那个构造器里做什么呢?我们正在制造一个具体的Quack实现类的实例!
?