设计模式–策略模式(Strategy)

设计模式–策略模式(Strategy)

策略模式
概述
    定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
适用性

    1.许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。

    2.需要使用一个算法的不同变体。

    3.算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。

    4.一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。
      将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。
参与者

    1.Strategy
      定义所有支持的算法的公共接口。Context使用这个接口来调用某ConcreteStrategy定义的算法。

    2.ConcreteStrategy
      以Strategy接口实现某具体算法。

    3.Context
      用一个ConcreteStrategy对象来配置。
      维护一个对Strategy对象的引用。
      可定义一个接口来让Stategy访问它的数据。
Example
Strategy 
public abstract class Strategy {

    public abstract void method();
}
ConcreteStrategy 
public class StrategyImplA extends Strategy {

    public void method() {
        System.out.println("这是第一个实现");
    }
}
public class StrategyImplB extends Strategy {

    public void method() {
        System.out.println("这是第二个实现");
    }
}
public class StrategyImplC extends Strategy {

    public void method() {
        System.out.println("这是第三个实现");
    }
}
Context 
public class Context {

    Strategy stra;
    
    public Context(Strategy stra) {
        this.stra = stra;
    }
    
    public void doMethod() {
        stra.method();
    }
}
Test 
public class Test {
    
    public static void main(String[] args) {
        Context ctx = new Context(new StrategyImplA());
        ctx.doMethod();
        
        ctx = new Context(new StrategyImplB());
        ctx.doMethod();
        
        ctx = new Context(new StrategyImplC());
        ctx.doMethod();
    }
}
result 
这是第一个实现
这是第二个实现
这是第三个实现

转载于:https://www.cnblogs.com/hainange/archive/2009/05/24/6153160.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110904.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 从零开始的Android:常见的UI设计模式「建议收藏」

    从零开始的Android:常见的UI设计模式「建议收藏」尽管Android允许您创建几乎任何可能需要的自定义视图或用户界面,但事实证明,在正确的情况下,有一些用户界面模式可以很好地适用于用户。在本教程中,您将学习其中的一些模式,以及它们如何通过在使用应用程序时创造出色的体验来帮助用户。1.主画面用户在打开应用程序时看到的第一个屏幕通常是最重要的。从这里开始,您的用户应该能够执行快速动作并继续前进,或者进一步深入到您的应用中以完善他们…

    2022年6月21日
    29
  • 二、设计模式-必要的基础知识—旅行前的准备 #和设计模式一起旅行#[通俗易懂]

    设计模式-谈谈模式和设计模式模式(Pattern),指事物的标准样式,百度百科上面说的,其实说白了模式就是我们现在说的套路!模式 == 套路模式是一种思想,说大了特别的复杂和深奥,不管怎么样模式的使用可以解决特定场景下特定的问题!准确表达:模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。软件模式那么在软件中使用模式,就是软件模式(Sof…

    2022年2月27日
    48
  • 设计模式之职责链模式

    相信大家都玩过类似于“斗地主”的纸牌游戏,某人出牌给他的下家,下家看看手中的牌,如果要不起,则将出牌请求转发给他的下家,其下家再进行判断。一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新

    2021年12月28日
    61
  • PHP 常见设计模式——工厂模式

    PHP 常见设计模式——工厂模式今天这篇文章主要是描述一下PHP常见设计模式之工厂模式。工厂模式其实可以划分为:简单工厂模式、工厂方法模式、抽象工厂模式等。

    2022年7月25日
    10
  • 什么是Web 2.0——下一代软件的设计模式和商业模式 (全文翻译—1 博客版序)

    什么是Web 2.0——下一代软件的设计模式和商业模式 (全文翻译—1 博客版序)这篇文章,是经O’Reilly公司的TimO’Reilly先生授权后,进行全文翻译、出版的。包括:杂志节选版和网络全文版。转载:请遵循CC版权,保留原文作者和翻译作者信息,以及文章链接。感谢:互联网周刊的李洋提供了许多建议。几个文章版本链接:英文原文:http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/

    2022年7月21日
    14
  • 十八、职责链模式-推卸责任,不关我的事,我不管!#和设计模式一起旅行#

    不在其位,不谋其政! –出自《论语·泰伯》故事背景在现实世界中,有很多情况下会遇到一些推卸责任的场景,比如要办理一件事的时候,被告诉你要去做个做这个事情,但是去了这个地方,确告诉要到另一个地方去,最后搞了很久,才办完这一件事。这种情况下,就可以简单的称为踢皮球,也就是推卸责任。在软件中,当外部请求程序进行某个出来,这个程序无法处理就把该请求转给其他对象负责,当对个对象组…

    2022年2月27日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号