策略模式【java版】

不羁岁月 提交于 2019-11-27 10:36:15

一、基本结构

    组成:

         a)策略接口:1个
         b)具体策略类:多个,封装了具体的算法和行为
         c)调度类:  1个,持有某具体策略类的引用,供客户端使用

   策略接口:

//策略接口,定义了不同策略供外部调用的“通用方法”public interface StrategyInterface {       public void multiWay_tour();}

   具体策略类一:

public class FirstConcreteStrategy implements StrategyInterface {    public void multiWay_tour() {//策略方法的具体实现        System.out.println("I'll go tourism on feet!");    }}

   具体策略类二:

public class SecondConcreteStrategy implements StrategyInterface {    public void multiWay_tour() {//策略方法的具体实现        System.out.println("I'll go tourism by train!");    }}

   调度类:

public class Context {    private StrategyInterface strategyInterface;        //调度类,根据传进来的具体策略对象的引用,调用其对应的方法    public Context(StrategyInterface strategyInterface) {        this.strategyInterface=strategyInterface;    }        public void multiWay_tour(){                this.strategyInterface.multiWay_tour();    }}

   说明: 如何体现“对扩展开放,对修改封闭”?

         当有新的具体策略需要添加时,只需要定义一个新的“具体策略类”,整个结构中,无需做任何修改


二、测试

   测试代码:

public class Main {    public static void main(String[] args) {        System.out.println("开始测试策略模式。。。");                //定义多个调度类对象        Context firstContext=new Context(new FirstConcreteStrategy());        Context secondContext=new Context(new SecondConcreteStrategy());                //调用“通用方法”,只通过“调度类”实现,算法之间的差异已被屏蔽        firstContext.multiWay_tour();        secondContext.multiWay_tour();    }}

   运行结果:

 

三、策略模式与简单工厂模式对比:

   简单工厂模式:根据不同的情况,创建不同的对象,对象之间类型差别较大,

         有可能各个类的方法名和个数差别很大

                         注重不同对象的创建:根据不同的情况创建不同的对象(eg:下单,查资金等)

   策略模式根据不同的情况,创建不同的对象.对象不同类型相近,方法差别大. 尤其适合经

         常变动的多种不同算法。 一般用于多个类的方法名都相同,但是实现方式不同

                         注重多个对象的相同行为屏蔽方法名相同,算法实现细节不同之间的差异

                                  (eg:txt、xml、dat、access四种格式的数据操作,读取,删除,修改) 

    

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!