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方法,这只是一个很简单的例子,这里也就说了 多用组合少用继承;用行为类组合,而不是行为继承,更具有弹性












  • 相关阅读:
    jQuery仿yahoo首页弹出层效果
    显示中文的星期几
    Oracle 會話級Session誤解
    异常处理點滴
    DataGrid 呈現數據——綁定與編程混合
    document.body.scrollTop 值总为0的解决方法(转载)
    DataGridView 一些設置
    事務回滾之實例
    数据库表设计下手
    WebApp匯入CSV資料
  • 原文地址:https://www.cnblogs.com/wadmwz/p/8870174.html
Copyright © 2011-2022 走看看