zoukankan      html  css  js  c++  java
  • [一]Head First设计模式之【策略模式】(鸭子设计的优化历程)

    public abstract class Duck {
    FlyBehavior flyBehavior;
    QuackBehavior quackBehavior;
    public Duck() {
    }
    public abstract void display();
    public void performFly() {
    flyBehavior.fly();
    }
    public void performQuack() {
    quackBehavior.quack();
    }
    public void swim() {
    System.out.println(“All ducks float, even decoys!”);
    }
    public void setFlyBehavior(FlyBehavior fb) {
    flyBehavior = fb;
    }
    public void setQuackBehavior(QuackBehavior qb) {
    quackBehavior = qb;
    }
    
    
    }
    public interface FlyBehavior {
    public void fly();
    }
    public class FlyWithWings implements FlyBehavior {
    public void fly() {
    System.out.println(“I’m flying!!”);
    }
    }
    public class FlyNoWay implements FlyBehavior {
    public void fly() {
    System.out.println(“I can’t fly”);
    }
    }
    public class FlyRocketPowered implements FlyBehavior {
    public void fly() {
    System.out.println(“I’m flying with a rocket!”);
    }
    }
    
    
    
     
    public interface QuackBehavior {
    public void quack();
    }
    public class Quack implements QuackBehavior {
    public void quack() {
    System.out.println(“Quack”);
    }
    }
    public class MuteQuack implements QuackBehavior {
    public void quack() {
    System.out.println(“<< Silence >>”);
    }
    }
    public class Squeak implements QuackBehavior {
    public void quack() {
    System.out.println(“Squeak”);
    }
    }


    public class ModelDuck extends Duck {
    public ModelDuck() {
    flyBehavior = new FlyNoWay();
    quackBehavior = new Quack();
    }
    public void display() {
    System.out.println(“I’m a model duck”);
    }
    }
    
    
    
     
    public class MiniDuckSimulator {
    public static void main(String[] args) {
    Duck mallard = new MallardDuck();
    mallard.performQuack();
    mallard.performFly();
    Duck model = new ModelDuck();
    model.performFly();
    model.setFlyBehavior(new FlyRocketPowered());
    model.performFly();
    
    
    
    
    }
    }

     策略模式:

      定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

  • 相关阅读:
    Python开发入门与实战3-Django动态页面
    Python开发入门与实战2-第一个Django项目
    Python开发入门与实战1-开发环境
    牛客网剑指offer第12题——数值的整数次方
    再叙快速排序
    牛客网剑指offer第29题——最小的k个数
    牛客网剑指offer第59题——按之字形顺序打印二叉树
    牛客网剑指offer第33题——第N个丑数
    各种特征距离的计算方法及应用
    牛客网剑指offer第24题——二叉树中和为某一值的路径
  • 原文地址:https://www.cnblogs.com/luoxiaolei/p/5372795.html
Copyright © 2011-2022 走看看