zoukankan      html  css  js  c++  java
  • 小白学习java设计模式之策略模式

    策略模式:
    1.分析项目中的变化部分与不变部分(每个设计模式都要分析的)
    2.多用组合少用继承;用行为类组合,而不是行为继承,更具有弹性
    直接上代码:
    package com.wz.oneStrategist;

    /**
    * 动物类(基类)
    *
    * @author Administrator
    * @create 2018-04-17 21:10
    */
    public class Animal {

    AnimalRun ar ;

    public Animal(AnimalRun ar) {
    this.ar = ar;
    }

    public void run(){
    ar.run();
    }

    }

    package com.wz.oneStrategist;

    /**
    * 动物的奔跑接口
    *
    * @author Administrator
    * @create 2018-04-17 21:12
    */
    public interface AnimalRun {

    public void run();

    }

    package com.wz.oneStrategist;

    /**
    * 动物跑得快的类
    *
    * @author Administrator
    * @create 2018-04-17 21:14
    */
    public class AnimalRunQuick implements AnimalRun{
    @Override
    public void run() {
    System.out.println("跑得快");
    }
    }

    package com.wz.oneStrategist;

    /**
    * 动物跑得慢的类
    *
    * @author Administrator
    * @create 2018-04-17 21:14
    */
    public class AnimalRunSlow implements AnimalRun{
    @Override
    public void run() {
    System.out.println("跑得慢");
    }
    }

    package com.wz.oneStrategist;

    /**
    * 狗的类(动物的子类)
    *
    * @author Administrator
    * @create 2018-04-17 21:17
    */
    public class Dog extends Animal{

    public Dog(AnimalRun ar) {
    super(ar);
    }
    }


    package com.wz.oneStrategist;

    /**
    * 乌龟类(动物的子类)
    *
    * @author Administrator
    * @create 2018-04-17 21:20
    */
    public class Tortaise extends Animal {

    public Tortaise(AnimalRun ar) {
    super(ar);
    }
    }


    package com.wz.oneStrategist;

    /**
    * 测试类
    *
    * @author Administrator
    * @create 2018-04-17 21:22
    */
    public class TestMain {

    public static void main(String[] args) {
    // 测试跑得快
    Animal animal1 = new Dog(new AnimalRunQuick());
    animal1.run();;

    // 测试跑得慢
    Animal animal2 = new Tortaise(new AnimalRunSlow());
    animal2.run();
    }
    }

    这个例子主要体现的是构造函数传递的参数,如果还有其他的类,比如说豹子类,老虎类等等,都是new AnimalRunQuick类的对象,可是为什么不使用继承呢?这就是我们要说的,如果使用继承,那么在豹子类,老虎类中都要重写Animal的run方法,3个还好说,如果是100个类,1000个类呢?使用策略模式就不需要重写run方法,这只是一个很简单的例子,这里也就说了 多用组合少用继承;用行为类组合,而不是行为继承,更具有弹性












  • 相关阅读:
    其它 Surface 重装系统 win10
    电商 商品数据分析 市场洞察 导出数据后 横线对比 python实现2
    电商 商品数据分析 市场洞察 导出数据后 横线对比 python实现
    电商 商品数据分析 市场洞察 导出数据后 横线对比
    Python excel转换为json
    关于四舍五入
    MBProgressHUD 显示后,为何不能点击屏幕其他地方
    使用容器挂载NFS
    luogu P1128 [HNOI2001]求正整数 dp 高精度
    EC R 86 D Multiple Testcases 构造 贪心 二分
  • 原文地址:https://www.cnblogs.com/wadmwz/p/8870174.html
Copyright © 2011-2022 走看看