锈才学设计模式之 —— 策略模式
策略模式:把功能提供者单独封装成类,使它们可以互相替换使用,让功能提供者独立于使用者(调用者).
说明:
在面向对象编程中,我们尽量将功能(类)设计成复用,以符合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
分享到:
相关推荐
java培训教程,我花了10000多才学的东西 java培训教程,我花了10000多才学的东西
东北财经才学会计系列教材会计学10第十章成本费用.pptx
东北财经才学会计系列教材会计学08第八章负债.pptx
东北财经才学会计系列教材会计学07第七章固定资产.pptx
[精选]东北财经才学会计系列教材会计学10第十章成本费用.pptx
[精选]东北财经才学会计系列教材会计学08第八章负债.pptx
[精选]东北财经才学会计系列教材会计学06第六章投资.pptx
[精选]东北财经才学会计系列教材会计学07第七章固定资产.pptx
[精选]东北财经才学会计系列教材会计学11第十一章收入利润.pptx
[精选]东北财经才学会计系列教材会计学09第九章所有者权益.pptx
种子短信基本页面 种子短信基本页面 种子短信基本页面
源码
这些特点的形成是元白诗歌创新之自任与转益多师之才学、中唐奢靡之风气与狎妓恋爱之体验、苦难蹭蹬之经历与复杂包容之思想等多种因素共同作用的结果。通过探析元白艳诗特点及其成因,有助于给予元白艳诗更客观的评价...
这是我学习c++一个月的时候编写的,是当时我们才学时的课程设计,临时做的。是个huntbug的小游戏
针对才学informix
本人也是一名JAVA的初学者,才学了一个月,因为有朋友需要做毕业设计,于是我花了十天时间写了这个超市进销存的软件,由于网上这类软件多是VB或VC写的,JAVA写的几乎没有,有源代码的更是少的可怜,于是我就想把自己写的...
在现行教育体制下,作为一名普通高校的计算机...为了使计算机专业的学生将来能真正成为德识才学体于一体的计算机的主人,我们应该打破传统的计算机教学模式,提倡多媒体教学和网络教学,并把素质教育融入到计算机教学中去。
阿里机器智能语音与信号处理技术精选专辑——顶级会议 ICASSP 2018收录论文 阿里机器智能语音与信号处理技术精选专辑——顶级会议 ICASSP 2018收录论文
才学的网页设计这门课,老师要我们随便做个。让大家点评一下。