将可变部分从程序中抽象分离成算法接口,在该接口下分别封装一些列算法实现,并使他们可以相互替换,从而导致客户端独立于算法的改变。
1、创建抽象父类
public abstract class Duck { public void quack(){ System.out.println("鸭子叫嘎"); } public void display(){ System.out.println("黄色"); } public void fly(){ } }
2、创建行为接口
public interface FlyStrategy { void performFly(); }
3、在父类中获取私有接口属性,并通过该接口,代理实现行为方法
public abstract class Duck { private FlyStrategy flyStrategy; public void setFlyStrategy(FlyStrategy flyStrategy) { this.flyStrategy = flyStrategy; } public void quack(){ System.out.println("鸭子叫嘎"); } public void display(){ System.out.println("黄色"); } public void fly(){ flyStrategy.performFly(); } }
5、创建具体行为类,实现该接口方法
public class FlyWithWin implements FlyStrategy { @Override public void performFly() { System.out.println("用翅膀飞"); } }
6、 在具体对象的构造方法里,调用父类set这个接口
public class Duck1 extends Duck{ public Duck1() { super(); super.setFlyStrategy(new FlyWithNoWay()); } @Override public void display() { System.out.println("1111"); } }