`
huqingyong_eye
  • 浏览: 37638 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

1.1、 策略模式

阅读更多

三个角色:
环境(Context)角色:持有一个Strategy类的引用。
抽象策略(Strategy)角色:通常由一个接口或者抽象类实现,此角色给出所有的具体策略类所需的接口。
具体策略(ConcreteStrategy)角色:包装相关算法和行为

为了帮助理解,我们举例来说明。
我们的程序要实现加密功能。加密有一个加密算法,加密算法有很多种,比如MD5,DES等,我们的程序需要实现这个功能,就是可以让用户选择不同的加密算法进行加密。
这个过程我们可以用Strategy模式来实现。
环境角色:

/**
* Context
*/
class EncryptContext {
    //策略对象
    EncryptStrategy strategy;
       
    public EncryptContext(EncryptStrategy strategy) {
        this.strategy = strategy;
    }    
    //执行具体的策略行为
    public void encrypt() {
        strategy.encrypt();
    }    
}



抽象策略角色:
/**
* Strategy & subclass
*/
interface EncryptStrategy {
    public void encrypt();
}


具体抽象策略角色:

//Strategy'subclass
class DesStrategy implements EncryptStrategy {
    public void encrypt() {
        System.out.println("encrypt by DES algorithm.");
        //TODO DES algorithm HERE。这里我们没给出具体的算法。
    }
}

//Strategy'subclass
class MD5Strategy implements EncryptStrategy {
    public void encrypt() {
        System.out.println("encrypt by MD5 algorithm.");
        //TODO MD5 algorithm HERE。这里我们没给出具体的算法。
    }
}


下面我们使用此策略
public class Client {
    /**
     * Test Strategy Pattern
     * 
     */
    public static void main(String[] args) {
        //2种不同的策略       
        //使用DES策略(算法)
        EncryptContext context = new EncryptContext(new DesStrategy());
        context.encrypt();        
        //使用MD5策略(算法)
        context = new EncryptContext(new MD5Strategy());
        context.encrypt();
        
    }
}
  • 大小: 3.8 KB
分享到:
评论

相关推荐

    基于设计模式的绘图程序

    至少在其中运用 3 种模式,其中涉及到的模式有装饰模式、策略模式、桥梁模式三种。 1.2 画图基本要求 能实现基本图形的绘制功能 1.3 画图高级要求 实现图形的操作(如选取、移动、放大、缩小、改变颜色、改变线形等...

    研磨策略模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在上述场景中,策略模式被用来解决报价管理中的复杂性。报价管理涉及到多种不同的报价策略,如针对普通客户、老客户和大客户的不同折扣策略。传统的...

    挖掘鸡 v1.1

    数据挖掘是一种从大量数据中通过算法寻找隐藏模式的过程,它涉及到统计学、机器学习和数据库技术。在"挖掘鸡 v1.1"的时代,由于数据量相对较小,但数据的价值并未被充分认识,这类工具的出现可能是为了帮助企业或...

    23种设计模式 - v1.1

    - 策略模式(Strategy):定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。 - 模板方法模式(Template Method):在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以不...

    基于设计模式的画图程序

    至少在其中运用 3 种模式,其中涉及到的模式有装饰模式、策略模式、桥梁模式三种。 1.2 画图基本要求 能实现基本图形的绘制功能 1.3 画图高级要求 实现图形的操作(如选取、移动、放大、缩小、改变颜色、改变线形等...

    拒绝服务网端口滤策略1.1正式版.rar

    在这个"拒绝服务网端口滤策略1.1正式版"中,我们可以预见到这可能是一款针对DoS攻击防护的软件或配置方案,其主要目标是过滤不正常的网络端口访问,以保护服务器和服务的稳定性。 在网络安全中,端口过滤是一种常见...

    FE1.1 Datasheet _v1.0

    这些选项包括但不限于端口模式选择、电源管理策略以及信号完整性调整,确保在不同应用环境下都能达到最优性能。 #### 技术亮点解析 - **MTT架构**:FE1.1采用了先进的MTT架构,显著提升了数据传输效率和处理速度。...

    java设计模式

    18.3.4 策略模式的注意事项 18.4 策略模式的扩展 18.5 最佳实践 第19章 适配器模式 19.1 业务发展—上帝才能控制 19.2 适配器模式的定义 19.3 适配器模式的应用 19.3.1 适配器模式的优点 19.3.2 适配器模式的应用 ...

    Professional ASP.NET 1.1

    通过学习和实践《Professional ASP.NET 1.1》中的示例,开发者能够掌握ASP.NET的基本概念,如页面生命周期、数据绑定、异常处理以及安全策略。这不仅有助于提升开发技能,也为后续的ASP.NET版本升级,如ASP.NET 2.0...

    Java23种设计模式(总结)

    1. 设计模式 2 1.1 创建型模式 3 1.1.1 工厂方法 3 1.1.2 抽象工厂 5 1.1.3 建造者模式 9 1.1.4 单态模式 12 1.1.5 原型模式 ...1.3.9 策略模式 1.3.10 模板方法 1.3.11 访问者模式

    Java设计模式-图解-附代码

    1.1 创建型模式 4 1.1.1 工厂方法 4 1.1.2 抽象工厂 6 1.1.3 建造者模式 10 1.1.4 单态模式 13 1.1.5 原型模式 15 1.2 结构型模式 17 ...1.3.9 策略模式 61 1.3.10 模板方法 63 1.3.11 访问者模式 65

    挖掘机1.1,网站挖掘

    6. **定制化设置**:用户可能需要针对不同目标网站或数据类型调整抓取策略,因此挖掘机1.1可能提供自定义规则、爬虫配置、代理设置等功能,以适应多样化的需求。 尽管挖掘机1.1是较早的一个版本,但它奠定了现代...

    Yii框架1.1版本

    2. **缓存管理**:Yii支持多种缓存策略,包括APC、Memcached、Redis等,能够优化应用性能,减少数据库的访问压力。 3. **安全防护**:Yii内置了丰富的安全功能,如防止SQL注入、XSS攻击,提供了认证和授权机制,...

    JAVA的23种设计模式实例

    JAVA的23种设计模式实例,如三大类创建型模式、结构型模式、行为型模式,细分为23种具体模式1. 设计模式 3 1.1 创建型模式 4 1.1.1 工厂方法 4 ...1.3.9 策略模式 61 1.3.10 模板方法 63 1.3.11 访问者模式 65

    Struts2.2.1.1源码

    通过阅读和分析源码,我们可以学习到如何设计和实现一个高效、灵活的Web框架,了解设计模式的应用,如工厂模式、单例模式、装饰者模式等。同时,还能学习到如何使用Apache的Commons系列库和其他开源组件,提升自己的...

    USB-HUBdatasheet包括FE1.1s、GL850G、MA8601

    其 datasheet中会详细阐述该芯片的功能特点,如支持USB 2.0高速(480Mbps)、全速(12Mbps)和低速(1.5Mbps)模式,具备过电流保护和电源管理功能。此外,还会提供如何配置和控制GL850G的硬件接口以及软件驱动程序...

    挖掘鸡1.1挖掘鸡1.1

    在数据科学领域,"挖掘"常用于描述从大量数据中提取有价值信息的过程,这可能包括预测分析、模式识别、关联规则学习等。 标签"挖掘鸡1.1"进一步确认了这个软件与数据挖掘有关,或许它具有独特的算法或用户界面设计...

    kafka_2.11-0.10.1.1.tgz

    2. 改进的容错性:在0.10.1.1版本中,Kafka增强了其容错性,通过改进的ISR(In-Sync Replicas)策略,确保了更高效的副本同步,从而提高了数据的可靠性。 3. 安全性提升:此版本引入了对SASL(Simple ...

    struts1.1中文手册

    - **错误处理**:通过配置文件设置全局和局部的错误处理策略,提供友好的错误提示页面。 4. **Struts 标签库** - **Bean 标签**:用于处理JavaBeans,包括复制Bean属性、定义脚本变量、显示Bean属性和国际化消息...

Global site tag (gtag.js) - Google Analytics