从零开始学习设计模式——策略模式

来源:互联网 发布:git linux 安装 编辑:程序博客网 时间:2024/06/15 12:14

写这个模式之前,实在是觉得策略模式和静态工厂模式很像,无非就是从父类中抽象中公用的方法,然后在实体类中重写具体的实现。但其实这两者的区别还是有的,从关注的点来说,静态工厂关注实例化的对象,而策略模式则更关注方法中不同的实现,先上代码吧。

抽象类和实现的实体,与静态工厂一样。

抽象类:

abstract class Operation {public abstract void AlgorithmInterface();}
实现类:

public class OperationAdd extends Operation{@Overridepublic void AlgorithmInterface() {// TODO Auto-generated method stubSystem.out.println("加法运算");}}
public class OperationSub extends Operation {@Overridepublic void AlgorithmInterface() {// TODO Auto-generated method stub//减法运算System.out.println("减法运算");}}
上下文类:

public class OperationContext {private Operation operation;public OperationContext(String type){switch (type) {case "add":OperationAdd operationAdd = new OperationAdd();operation = operationAdd;break;case "sub":OperationSub operationSub = new OperationSub();operation = operationSub;break;default:break;}}public void getResult(){operation.AlgorithmInterface();}}

客户端代码:

public class MainClass {public static void main(String[] args) {// TODO Auto-generated method stubOperationContext context = new OperationContext("add");context.getResult();}}

其实区别最大的就是客户端的部分,我们来对比静态工厂:

public class MainClass {public static void main(String[] args) {// TODO Auto-generated method stubOperation operation= new OperationFactory.create("add");}}
对于策略模式,我们只需要了解OperationContext这一个类,所有和这个类相关的算法都封装在这个类里,这个类可以看做是所有算法的集合类,而在工厂模式中,除了关注工厂类,还需要关注算法的父类Operation,显然,从算法的角度来说,策略模式的耦合度更低。

0 0
原创粉丝点击