`

锈才学设计模式之 —— 策略模式(Strategy Pattern)

阅读更多

锈才学设计模式之  —— 策略模式

 

策略模式把功能提供者单独封装成类,使它们可以互相替换使用,让功能提供者独立于使用者(调用者).

 

说明:

       在面向对象编程中,我们尽量将功能(类)设计成复用,以符合OO思想。往往在开始都喜欢用继承来实现类的重用,当子类继承父类时,就可以重用父类的公共属性和方法。比如:
继承图

这种继承的方法,将使子类的方法都由父类继承而来,此例中,各种方式的加密子类继承父类的加密、解密方法,对于一种加密方式时可以满足,但是如果需要多种加密方法时就无法满足,就有很大的局限性,不具备足够的弹性,比如此图中的类别,当[报文加密]使用MD5算法,[Excel加密] 使用SHA算法时,往往就不能满足调用者的要求。此时就需要将功能提供方单独封装成类,独立于调用方,通过互相替换,达到各个功能的调用。比如:
策略模式

在这图例中,在算法父类“有一个”算法的接口,将具体的算法都委托给它代为处理,并提供set、get方法。这样,子类的具体算法就不是继承父类而来,而是和适合的算法组合而来。这种组合建立的模型非常有弹性,更特别的是可以在运行时动态改变算法(行为),只要组合的对象符合父类算法的接口标准就可以。这种模式设计后,如果扩展一个[XML加密]类,它使用DES算法,则非常简单,增加[XML加密类],继承[加解密算法]父类,新增一个[DES算法类],实现算法接口,然后就可以在XML加密类中动态指定DES算法了。

示例代码:
    == 加解密算法父类 ==

package com.jody.pattern.strategy;
/**
 * 功能/模块:策略模式
 * 类描述:加解密算法类
 * @author JODY 
 * @version P1.15.5 Mar 16, 2009 11:23:20 PM
 * @see 修订历史 
 * @see 相关类连接
 */
public class Arithmetic {
	private IArithmetic Abehavior;//算法接口
	
	public IArithmetic getAbehavior() {
		return Abehavior;
	}
	/**
	 * 动态替换算法
	 * @param abehavior
	 */
	public void setAbehavior(IArithmetic abehavior) {
		Abehavior = abehavior;
	}
	/**
	 * 加密
	 * @param estr 明文
	 * @return
	 */
	public String encrypt(String estr){
		return null;
	}
	/**
	 * 解密
	 * @param dstr 密文
	 * @return
	 */
	public String decrypt(String dstr){
		return null;
	}
}

 

   == 报文加密子类 == 

package com.jody.pattern.strategy;
/**
 * 功能/模块:设计模式
 * 类描述:报文加密
 * @author JODY
 * @version 1.0
 * @see 修订历史 
 * @see 相关类连接
 */
public class Message extends Arithmetic {
	public Message(){
		//动态组合MD5算法
		setAbehavior(new MD5Impl());
	}
	public void display(){
		System.out.println("这是报文加密");
	}
}

   
  == 算法接口 ==  

package com.jody.pattern.strategy;
/**
 * 功能/模块:设计模式
 * 类描述:算法接口
 * @author JODY
 * @version 1.0
 * @see 修订历史 
 * @see 相关类连接
 */
public interface IArithmetic {
	/**
	 * 加密
	 * @param estr
	 * @return
	 */
	public String encrypt(String estr);
	/**
	 * 解密
	 * @param dstr
	 * @return
	 */
	public String decrypt(String dstr);
}

 

   == MD5算法实现类 ==

package com.jody.pattern.strategy;
/**
 * 功能/模块:设计模式
 * 类描述: MD5加密算法
 * @author JODY
 * @version 1.0
 * @see 修订历史 
 * @see 相关类连接
 */
public class MD5Impl implements IArithmetic {

	public String decrypt(String dstr) {
		// TODO 加密
		return null;
	}

	public String encrypt(String estr) {
		// TODO 解密
		return null;
	}

}

 

   == 测试调用类 == 

package com.jody.pattern.strategy;
/**
 * 功能/模块:设计模式
 * 类描述: 测试类
 * @author JODY
 * @version 1.0
 * @see 修订历史 
 * @see 相关类连接
 */
public class TestClass {
	public static void main(String args[]){
		Arithmetic a = new Message();
		//a.setAbehavior(new MD5Impl());//Message初始化了MD5Impl
		String dstr = a.encrypt(args[0]);//加密		
	}
}

 

说明:

       当TestClass中实例new Message()报文算法时,初始化将采用MD5算法.这样调用者和提供者就独立开了,非常容易扩展。

 

设计原则:多用组合,少用继承

 

  • 大小: 25.8 KB
  • 大小: 47.9 KB
分享到:
评论

相关推荐

    秦邑胡氏家族的骄傲——胡缵宗.pdf

    因其才学得到李东阳赏识,被授予翰林院检讨的职位,参与编纂了《世宗实录》。胡缵宗的仕途起起伏伏,曾因刘瑾谋反案受到牵连,被贬为嘉定州判官,后升任瞳川州知州、安庆府知府等职。他在各地任职期间,都以其廉洁和...

    java培训教程,我花了10000多才学的东西

    java培训教程,我花了10000多才学的东西 java培训教程,我花了10000多才学的东西

    解读隐士文化——从陶渊明看中国传统文化中的隐士现象.pdf

    《辞海》中对“隐士”的定义虽然只强调了隐居不仕,但真正的隐士更应具备一定的社会地位和影响力,如《南史·隐逸》中所述,他们应有才学,以天地为心,借自然之气,而非普通农夫或商贾所能比拟。 陶渊明的归隐之路...

    跟着崔庆才学爬虫2:requests库的使用

    崔庆才老师的“跟着崔庆才学爬虫2:requests库的使用”教程主要涵盖了Python爬虫中必不可少的requests库的使用方法。requests库是Python中最常用的HTTP客户端库,用于发送HTTP请求,非常适合进行网页抓取。在这个...

    忽必烈征讨爪哇随军医工提领——以新获《元故肖岩傅公圹记》为中心的研究.pdf

    此外,墓志铭还提及傅居安的家族教育,尤其是女性成员的才学与家教,表明医学世家的儒学底蕴。傅居安的女儿傅妙珍和傅妙净的事迹,揭示了当时女性在家庭和社会中的作用以及她们的文化素养。 总的来说,这篇研究通过...

    东北财经才学会计系列教材会计学10第十章成本费用.pptx

    第十章主要探讨的是会计中的核心概念——成本与费用。费用是企业在日常运营中产生的,会导致所有者权益减少的经济利益总流出,不涉及向所有者分配利润。费用分为多个要素,具有特定的特征:首先,它源于企业的日常...

    2021高考历史统考版二轮复习学案:第2篇 第4辑 板块1 专题1 沿革——政治文明的精髓与局限 .doc

    - 夏商周时期的世官制基于血缘,后发展为军功爵制、察举制、九品中正制,最终到科举制,以才学为选拔标准。 - 监察制度从中央的御史大夫到地方的刺史、道、路等,不断扩大监察范围,如宋代谏官的监管对象扩大到...

    有趣成语故事,诠释人生智慧

    4. 机智应对——面对困难和挑战,灵活运用智慧,采取最合适的应对策略,以达到最好的结果。 通过对这些成语故事的学习,我们不仅能够丰富自己的语言表达能力,还能深刻理解中华文化中的处世哲学和人生智慧。在现实...

    种子短信页面--Csharp才学手

    种子短信基本页面 种子短信基本页面 种子短信基本页面

    huntbug课程设计

    【标题】"huntbug课程设计"揭示了这个项目的核心是一个基于C++编程语言的游戏,名为"Huntbug"。在这个项目中,作者显然旨在运用刚刚掌握的C++基础知识,通过实践来深化理解并提升编程技能。 【描述】描述部分提到,...

    东北财经才学会计系列教材会计学08第八章负债.ppt

    《会计学:负债的核算与理解》 会计学中,负债是企业财务报表的重要组成部分,它反映了企业对外部债权人的经济责任。负债的定义明确指出,负债是由于过去发生的交易或事项,使得企业承担的、预期会导致经济利益流出...

    东北财经才学会计系列教材会计学08第八章负债.pptx

    《会计学:负债的核算与理解》 负债作为企业财务状况的重要组成部分,是企业在过去的交易或事项中产生的、预期会导致经济利益流出的现时义务。理解负债的含义、特征、分类以及核算方法,对于准确把握企业的财务健康...

    东北财经才学会计系列教材会计学07第七章固定资产.pptx

    【固定资产核算】 固定资产是企业在生产经营过程中使用的长期资产,其特点是为生产商品、提供劳务、出租或经营管理而持有,且使用寿命超过一个会计年度。不同于短期的流动资产,如材料,固定资产通常包括土地、建筑...

    饮食行业企业领导方法与艺术.pptx

    在饮食行业的企业领导中,领导方法与艺术是至关重要的。...总的来说,饮食行业企业领导的艺术在于把握管理的核心——人,通过有效的领导方法和策略,构建和谐、高效的团队,实现企业目标并推动行业的持续发展。

    [精选]东北财经才学会计系列教材会计学06第六章投资.pptx

    3. 处置时:按处置价格与账面价值之差确认处置损益。 举例说明,假设华联公司购入A公司股票50,000股,支付325,000元,交易费用1,200元。则会计分录如下: 借:交易性金融资产 - A公司股票 - 成本 3,250,000 投资...

    [精选]东北财经才学会计系列教材会计学08第八章负债.pptx

    同时,合理安排负债结构,既能满足经营需要,又能控制财务风险,是企业财务管理的核心任务之一。 非流动负债的核算相对复杂,涉及到长期借款、应付债券等,其特点是偿还期限长,通常伴随着利息资本化、分期偿还等...

    [精选]东北财经才学会计系列教材会计学10第十章成本费用.pptx

    【知识点详解】 1. **费用与成本的概念与内容** 费用是指企业在日常活动中发生的、会导致所有者权益减少的、与向所有者分配利润无关的经济利益的总流出。它包括了企业在生产、销售过程中发生的各种耗费,如购买材料...

    [精选]东北财经才学会计系列教材会计学07第七章固定资产.pptx

    【固定资产的核算】是会计学中的重要组成部分,主要涉及企业持有的长期使用且具有特定实物形态的有形资产。根据给出的文件内容,本章节详细介绍了固定资产的各个方面。 首先,【固定资产的概念】强调了固定资产的两...

Global site tag (gtag.js) - Google Analytics