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












  • 相关阅读:
    数据结构基础知识(2)
    ASIHttpRequest异步请求网络崩溃解决
    [置顶] Android仿人人客户端(v5.7.1)——采用ViewGroup做父容器,实现左侧滑动菜单(三)
    Linux中ifcfgeth0配置参数说明
    什么是redis
    CentOS网络接口配置文件ifcfgeth详解
    查看Linux版本
    CentOS7 network.service loaded failed 处理技巧
    如果这都不算爱
    ACL Security In Seam, Part 1
  • 原文地址:https://www.cnblogs.com/wadmwz/p/8870174.html
Copyright © 2011-2022 走看看