java_23种设计模式之策略模式

关于设计模式至今理解不是很深,在此发表文章一方面为了加深对设计模式的理解,另一方面希望由此与大家进行交流。

今天研究了一下策略模式,对策略模式理解为:通过对抽象策略角色(抽象类、接口)的实现的包装,从未进行动态操作的过程。

详细解释如下:

1.抽象策略角色:策略类,包含要做的事情(方法),通常有抽象类或接口进行实现;

2.策略类的实现:包装了对要做的事情的具体做法和行为;

3.动态操作:持有对策略类的引用,从而可以动态选择需要的实现,最终交给某一客户端进行调用。

对于策略模式来说,核心的部分是持有对策略类的引用。

具体代码示例如下:

1./**策略类*/

 

public interface  IStrategy {
/** 策略方法 */
public abstract double  add();
}
2./**策略类的实现,以下写了两个实现*/
public class  ConcreteStrategy1  implements  IStrategy {
/** 示意性算法 */
public double  add() {
//  TODO  自动生成方法存根
System. out .println( this .getClass().getName() +  "的加法运算" );
return  0;
}
}
public class  ConcreteStrategy2  implements  IStrategy {
public double  add() {
//  TODO  自动生成方法存根
System. out .println( this .getClass().getName() +  "的加法运算" );
return  0;
}
}
3./**对策略类的引用*/
public class  Context {
/** 环境角色类 */
private  IStrategy  strategy ;
public  Context(IStrategy strategy) {
this . strategy  = strategy;
}
/** 策略方法 */
public double  add() {
this . strategy .add();
return  0;
}
}
4./**客户端调用*/
public class  Main {
/**
* @param args
*/
public static void  main(String[] args) {
//  TODO  自动生成方法存根
Context context =  new  Context( new  ConcreteStrategy1());
context.add(); //执行算法1
context =  new  Context( new  ConcreteStrategy2());
context.add(); //执行算法2
}
}
5.执行结果如下:
ConcreteStrategy1的加法运算
ConcreteStrategy2的加法运算
6.总结:
优点:可以动态的选择需要的实现;
缺点:需要自行去决定需要那些实现,即必须对每个实现类熟悉。
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值