《Java与模式》学习笔记之九-----策略模式(Strategy Pattern) 收藏
策略模式是对算法的包装,把使用算法的责任和算法本身分隔开,委派给不同的对象管理。策略模式通常把一系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。
何时使用策略模式:
1) 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态的让一个对象在许多行为中选择一种行为。
2) 如果系统需要动态地在几种算法中选择一种。那么这些算法可以包装到一个个的具体算法类里面,而这些算法类都是一个抽象算法类的子类。换言之,这些具体算法类均有统一的接口,由于多态性原则。客户端可以选择使用任何一个具体算法类,并只持有一个数据类型是抽象算法类的对象。
3) 一个系统的算法使用的数据不可以让客户端知道。策略模式可以避免让客户端涉及到不必要接触到的复发的和只与算法有关的数据。
4) 假设这样一个案例:假设现在要设计一个贩卖各类书籍的电子商务网站的购物车系统。如果要计算购物车的货品的价格,一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,教材类图书每本一元折扣,连环画类图书每本7%的折扣,非教材类计算机图书3%折扣,其余没有折扣。这个价格计算问题就可以由策略模式来解决。
类图:
源代码:
public class Context {
private Strategy stg;
public Context(Strategy theStg)
{
this.stg = theStg;
}
public void DoAction()
{
this.stg.AlgrithmInterface();
}
}
public class ConcreteStrategyA implements Strategy {
public void AlgrithmInterface()
{
System.out.println("ConcreteStrategyA.AlgrithmInterface");
}
}
public class ConcreteStrategyB implements Strategy {
public void AlgrithmInterface()
{
System.out.println("ConcreteStrategyB.AlgrithmInterface");
}
}
public class Context {
private Strategy stg;
public Context(Strategy theStg)
{
this.stg = theStg;
}
public void DoAction()
{
this.stg.AlgrithmInterface();
}
}
public class Client {
public static void main(String[] args) {
Strategy stgA = new ConcreteStrategyA();
Context ct = new Context(stgA);
ct.DoAction();
}
}
策略模式的缺点:
1) 客户端必须知道所有的策略类,并自行决定使用哪一个策略类,这就意味着客户端必须
理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。
2)策略模式造成许多的策略类。有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略类设计成可共享的,这样策略类实例可以被不同客户端使用。换言之,可以使用享元模式来减少对象的数量。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/surprisesdu/archive/2006/03/24/636951.aspx
- 大小: 62.1 KB
分享到:
相关推荐
Java设计模式学习笔记
总结了java开发中的21种设计模式,详解和例子,带书签的pdf格式,方便阅读!
学习Java设计模式的笔记,标注了其中重要的要点,如果有需要的小伙伴,自行下载哦
java设计模式的学习笔记,其中包含各种模式的代码实现
图解java设计模式_学习笔记_java开发解压密码为twj123
林信良学习笔记(内容):ajax学习笔记,算法学习笔记,计算机图形学,C++学习笔记,设计模式,Hibernate学习笔记,Java学习笔记,JSF,JSP/Servlet,JUnit,Spring,Struts等
java学习笔记大全:java内容介绍 java编程可以分成三个方向: 1、java se (j2se)桌面开发 java中的基础中的基础 2、java ee (j2ee)web开发 3、java me (j2me)手机开发 java se课程介绍 java面向对象编程(基础) java...
16-Java代理模式的学习笔记1
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
Java/JavaEE 学习笔记 作者在杰普学习时的学习笔记,是J2ee初学者必备手册,是大家学习J2EE开发的很好的参考笔记。 Java/JavaEE 学习笔记 内容目录: Unix 学习笔记..........7 一、Unix前言............7 二、...
Java 版设计模式学习笔记-java-design-patterns
zookeeper云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-...
java学习笔记1(java io/nio)设计模式