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();
    
    
    
    
    }
    }

     策略模式:

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

  • 相关阅读:
    MySQL链接超时的解决办法
    使用Axis开发Web Service程序
    Linux动态库(.so)搜索路径
    MYSQL性能调优简述
    什么是AXIS
    巧夺天工的kfifo
    双离合DSG
    实例讲解C# WebService
    如何为 MySQL 选择更合适的服务器硬件
    7 MySQL 事务与锁定命令
  • 原文地址:https://www.cnblogs.com/luoxiaolei/p/5372795.html
Copyright © 2011-2022 走看看