JAVA的23种设计模式---策略模式

来源:互联网 发布:助理软件研发工程师 编辑:程序博客网 时间:2024/06/07 07:25

概要:

该文章参考了《设计模式之禅》一书及一些前辈的博客文章

1.该文章阐述了策略模式的基础原理及示例代码;
2.该文章适合初学设计模式的技术人员研习;
3.该文章有许多不足之处,请各位大咖指正,喷子绕道;

正文:

策略模式(政策模式):定义一组算法,将每个算法封装起来,并且使他们之间可以互换。

1.策略模式示例代码实现:

package com.csdn;/** * 方案抽象类 * @author Administrator * */public interface Programme {    //执行方案    public void implementationPlan();}
package com.csdn;/** * 方案一 * @author Administrator * */public class Programme1 implements Programme {    //执行方案一    @Override    public void implementationPlan() {        System.out.println("执行方案一");    }}
package com.csdn;/** * 方案二 * @author Administrator * */public class Programme2 implements Programme {    //执行方案一    @Override    public void implementationPlan() {        System.out.println("执行方案二");    }}
package com.csdn;/** * 方案三 * @author Administrator * */public class Programme3 implements Programme {    //执行方案一    @Override    public void implementationPlan() {        System.out.println("执行方案三");    }}
package com.csdn;/** * 方案储存处 * @author Administrator * */public class ProgramStorage {    //要使用哪个方案    Programme programme;    public ProgramStorage(Programme _programme){        this.programme = _programme;    }    //执行方案    public void implementationPlan(){        this.programme.implementationPlan();    }}
package com.csdn;/** * 执行人 * @author Administrator * */public class Executor {    public static void main(String[] args) {        ProgramStorage programStorage;        programStorage = new ProgramStorage(new Programme1());        programStorage.implementationPlan();        programStorage = new ProgramStorage(new Programme2());        programStorage.implementationPlan();        programStorage = new ProgramStorage(new Programme3());        programStorage.implementationPlan();    }}

输出:

执行方案一执行方案二执行方案三

注:
a:该示例演示了三套方案,执行人根据情况去方案储存处查看并执行相应方案的场景
b:策略模式包含了封装角色、抽象策略角色、具体策略角色三个角色
c:策略模式重点就是封装角色,他借用了代理模式的思路,差别就是策略模式的封装角色和被封装的策略类不是同一个接口
d:我们一般通过工厂模式来实现策略类的声明

2.枚举策略模式示例代码实现:

package com.csdn;/** * 枚举策略三种方案 * @author Administrator * */public enum Programme {    //方案一    PROGRAMME1{        //具体方案执行方法        @Override        public void implementationPlan(){            System.out.println("执行方案一");        }    },    //方案二    PROGRAMME2{        //具体方案执行方法        @Override        public void implementationPlan(){            System.out.println("执行方案二");        }    },    //方案三    PROGRAMME3{        //具体方案执行方法        @Override        public void implementationPlan(){            System.out.println("执行方案三");        }    };      //抽象方案执行方法    public abstract void implementationPlan();}
package com.csdn;/** * 执行人 * @author Administrator * */public class Executor {    public static void main(String[] args) {        //执行方案一        Programme.PROGRAMME1.implementationPlan();        //执行方案二        Programme.PROGRAMME2.implementationPlan();        //执行方案三        Programme.PROGRAMME3.implementationPlan();    }}

注:
a:它是一个浓缩了策略模式的枚举

原创粉丝点击