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












  • 相关阅读:
    字体辉光效果
    C# 读写 Photoshop PSD文件 操作类
    SQL Server日期时间格式转换字符串详解
    用DataTable填充实体类List
    C#控件的闪烁问题解决方法总结
    .NET Framework的属性类对控件的支持功能
    Aspose破解版本dll
    整理的C#屏幕截图,控件截图程序
    C#绘制渐变背景
    VS2010编译的时候出现fatal error LNK1146: 没有用选项“/out:”指定的参数
  • 原文地址:https://www.cnblogs.com/wadmwz/p/8870174.html
Copyright © 2020-2023  润新知