`

3. 行为型模式 (1) 策略模式

阅读更多
3. 行为型模式 (1) 策略模式

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

优点:
1. 算法可以自由切换。
2. 避免使用多重条件判断。
3. 扩展性良好。

缺点:
1. 策略类会增多。
2. 所有策略类都需要对外暴露。


1. 策略模式

package com.andrew.pattern0301.strategy.model01;
public interface Strategy {
    public int doOperation(int num1, int num2);
}


package com.andrew.pattern0301.strategy.model01;
public class OperationAdd implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 + num2;
    }
}

package com.andrew.pattern0301.strategy.model01;
public class OperationMultiply implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 - num2;
    }
}

package com.andrew.pattern0301.strategy.model01;
public class OperationSubstract implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 * num2;
    }
}


package com.andrew.pattern0301.strategy.model01;
public class Context {
    private Strategy strategy;
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    public int executeStrategy(int num1, int num2) {
        return strategy.doOperation(num1, num2);
    }
}


package com.andrew.pattern0301.strategy.model01;
/**
 * 1. 策略模式
 * 
 * @author andrew
 * @date 2018/08/01
 */
public class Client {
    public static void main(String[] args) {
        Context context = new Context(new OperationAdd());
        System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
        context = new Context(new OperationSubstract());
        System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
        context = new Context(new OperationMultiply());
        System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
    }
}
运行结果:
10 + 5 = 15
10 - 5 = 50
10 * 5 = 5


2. 策略模式

package com.andrew.pattern0301.strategy.model02;
public interface Strategy {
    public int calculate(int a, int b);
}


package com.andrew.pattern0301.strategy.model02;
public class AddStrategy implements Strategy {
    @Override
    public int calculate(int a, int b) {
        return a + b;
    }
}

package com.andrew.pattern0301.strategy.model02;
public class DivideStrategy implements Strategy {
    @Override
    public int calculate(int a, int b) {
        return a / b;
    }
}

package com.andrew.pattern0301.strategy.model02;
public class MultiplyStrategy implements Strategy {
    @Override
    public int calculate(int a, int b) {
        return a * b;
    }
}

package com.andrew.pattern0301.strategy.model02;
public class SubtractStrategy implements Strategy {
    @Override
    public int calculate(int a, int b) {
        return a - b;
    }
}


package com.andrew.pattern0301.strategy.model02;
public class Environment {
    private Strategy strategy;
    public Environment(Strategy strategy) {
        this.strategy = strategy;
    }
    public Strategy getStrategy() {
        return strategy;
    }
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }
    public int calculate(int a ,int b) {
        return strategy.calculate(a , b);
    }
}


package com.andrew.pattern0301.strategy.model02;
/**
 * 2. 策略模式
 * 
 * @author andrew
 * @date 2018/08/01
 */
public class Client {
    public static void main(String[] args) {
        AddStrategy addStrategy = new AddStrategy();
        Environment environment = new Environment(addStrategy);
        System.out.println(environment.calculate(3, 4));
        SubtractStrategy subtractStrategy = new SubtractStrategy();
        environment.setStrategy(subtractStrategy);
        System.out.println(environment.calculate(3, 4));
        MultiplyStrategy multiplyStrategy = new MultiplyStrategy();
        environment.setStrategy(multiplyStrategy);
        System.out.println(environment.calculate(3, 4));
        DivideStrategy divideStrategy = new DivideStrategy();
        environment.setStrategy(divideStrategy);
        System.out.println(environment.calculate(3, 4));
    }
}
运行结果:
7
-1
12
0
分享到:
评论

相关推荐

    java 23种设计模式.zip

    设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象...4.行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

    (行为型模式) Strategy 策略模式

    C#面向对象设计模式 (行为型模式) Strategy 策略模式 视频讲座下载

    c++设计模式-行为型模式-策略模式

    c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...

    23种设计模式 (创建型,结构型,行为型)

    创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3.... 4.... 5....结构型: ... 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    C#面向对象设计模式纵横谈\23 行为型模式Strategy策略模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第23节:行为型模式Strategy策略模式

    JAVA-设计模式-行为型模式-策略模式

    JAVA-设计模式-行为型模式-策略模式

    c#设计模式 行为型模式 实验报告+源代码

    c#设计模式 行为型模式 包括8个设计模式的实验报告+源代码。实验报告包括实验类图和个人总结的一些小技巧,源代码...包括:职责链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式

    设计模式_行为型_策略模式.md

    设计模式_行为型_策略模式

    C#新版设计模式手册[中文][共二卷][vol1]

    21.策略模式..................................................132 22.模版方法..................................................137 23.访问者模式................................................

    C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式

    C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式

    C#设计模式_设计模式_C#_

    创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4.... 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    10.设计模式-策略模式1

    1.当你有很多类似的类,但它们执行某些行为的方式不同时,请使用此 2.使用该模式将类的业务逻辑与算法的实现细节隔离开来,这些算法在 3.当你的类具有大量的条件运

    设计模式之行为型模式

    本课程重点介绍了十一种行为型模式:职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式。

    设计模式笔记(包含所有设计模式)个人总结提炼笔记

    3. 行为型模式:行为型模式关注对象之间的通信和协作,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。这些模式可以帮助...

    C#设计模式(23种设计模式)

    创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) ... 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern) @Author kwming

    C#新版设计模式手册[中文][共二卷][vol2]

    21.策略模式..................................................132 22.模版方法..................................................137 23.访问者模式................................................

    用Java实现23种设计模式

    3. 行为型模式 责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式...

    对跨境电商消费者行为模式及营销策略的探讨.pdf

    对跨境电商消费者行为模式及营销策略的探讨.pdf

    《设计模式可复用面向对象软件的基础》

    20第2章 实例研究:设计一个文档编辑器 222.1 设计问题 232.2 文档结构 232.2.1 递归组合 242.2.2 图元 252.2.3 组合模式 272.3 格式化 272.3.1 封装格式化算法 272.3.2 Compositor和Composition 272.3.3 策略模式 ...

    设计模式_策略模式.zip

    在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 策略模式java-demo 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 ...

Global site tag (gtag.js) - Google Analytics