策略模式:定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
设计原则:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
设计原则: 针对接口编程,而不是针对实现编程
此设计原则涉及到面向对象编程中一个极其重要的特点:多态。具体说,就是父类指针指向子类对象。一个对象Has a Interface,并针对此接口编程。
而在实例化时,可以让此接口指向任一实现了此接口的子类对象。
父类Duck,持有飞行行为FlyBehavior及呱呱叫行为QuackBehavior的两个指针
1 package Duck20160802; 2 3 //Duck类为所有鸭子对象的父类 4 5 public abstract class Duck { 6 FlyBehavior flyBehavior; 7 QuackBehavior quackBehavior; 8 9 public Duck(){ 10 11 } 12 13 public void performFly(){ 14 flyBehavior.fly(); 15 } 16 17 public void performQuack(){ 18 quackBehavior.quack(); 19 } 20 21 public void swim(){ 22 System.out.println("All ducks float,even decoys!"); 23 } 24 25 }
MallardDuck继承了Duck,并将FlyBehavior及QuackBehavior指定为具体的飞行和呱呱叫行为
1 package Duck20160802; 2 3 //红头鸭MallardDuck继承父类Duck,并将quackbehavior制定为Quack方法 4 //flyBehavior指定为FlyWithWings方法 5 6 public class MallardDuck extends Duck { 7 public MallardDuck(){ 8 quackBehavior = new Quack(); 9 flyBehavior = new FlyWithWings(); 10 } 11 12 public void display(){ 13 System.out.println("I‘m a real Mallard duck!"); 14 } 15 16 }
所有的文件
可以继续扩展FlyBehavior和QuackBehavior,但不用修改Duck类
设计原则:多用组合,少用继承
时间: 2024-10-10 04:20:34