学习java软件开发已有二年了,逐渐的从面向过程到面向对象编程,使我对开发有了一定的深入了解,也促使我对面向对象编程的深入学习,首先从设计模式开始。
以前也看过一些设计模式的书籍,但没有什么理解,也不懂其里面的思想,所以从现在开始,深入学习模式。
策略模式
策略模式属于对象的行为模式,其用意是针对一组算法,把每个算法封装到具有共同接口的独立类中,从而使它们能够互换。策略模式使得算法可以在不影响客户端的情况下发生变化。
所有这些算法完成的都是相同的工作,只有实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类和使用算法类之间的耦合。
策略模式的结构
策略模式涉及到三个角色:
1)环境(context)角色:持有一个strategy类的引用
2)抽象策略角色(strategy) 角色:此角色给出所有的具体策略类所需的接口,通常由一个接口或抽象类实现
3)具体策略类角色(ConcreteStrategy):包装了相关的算法和行为
/**
* 抽象策略角色
*/
public interface Strategy
{
void operate();
}
/**
* 具体策略角色
*/
public class ConcreteStrategy implements Strategy
{
public void operate()
{
System.out.println("具体策略角色");
}
}
/**
* 环境角色
*/
public class Context
{
Strategy strategy;
public Context(Strategy strategy)
{
this.strategy = strategy;
}
public void operate()
{
this.strategy.operate();
}
}
何时使用策略模式
1)如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态的让一个对象在许多行为中选择一种行为。
2)如果系统需要动态地在几种算法中选择一种。那么这些算法可以包装到一个个的具体算法类里面,而这些算法 类都是一个抽象算法类的子类。换言之,这些具体算法类均有统一的接口,由于多态性原则。客户端可以选择使用任何一个具体算法类,并只持有一个数据类型是抽象算法类的对象。
3)一个系统的算法使用的数据不可以让客户端知道。策略模式可以避免让客户端涉及到不必要接触到的复杂的和只与算法有关的数据。
4)如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现,此时,使用策略模式,把这些行为都转移到相应的策略类里面,就可以避免使用难以维护的条件选择语句,并体现出面向对象设计的概念。
策略模式的优缺点
优点:
1) 策略模式提供了管理相关的算法族的办法
2) 策略模式提供了可以替换继承关系的办法
3) 策略模式可以避免使用多重条件选择语句
缺点:
1)客户端必须知道所有的策略类,并自行决定使用哪种策略类
2)策略模式造成很多的策略类
分享到:
相关推荐
55-Java设计模式之策略模式与状态模式1
javase 设计模式的strategy pattern《JAVA与模式》之策略模式详解
java设计模式之策略模式实现源码
java 策略模式的简单小例子,可以帮助了解策略模式的使用
JAVA设计模式demo之策略模式,解压代码可以直接运行。谁能告诉我,为什么资源分不能搞成0分?!
java策略模式的小例子,学习java策略模式的简单例子,代码虽然简单不错很容易明白
Java设计模式之策略模式的详细描述
java设计模式之策略模式 内含策略模式讲解ppt 自己根据ppt写了一个小例子 先不用策略模式 后用策略模式 形成了鲜明对比 对初学者很有用
Java设计模式策略模式Demo
Java开发模式之策略模式,有23种经典的设计模式!适合初者快速入门。
java 策略模式
NULL 博文链接:https://lfl2011.iteye.com/blog/1693685
java策略模式示例代码,用于初学者学习使用,示例简单易懂
3 策略模式 4 模板方法模式 5 工厂方法模式 6 抽象工厂模式 7 建造者模式 8 代理模式 9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版方法+责任链+...
设计模式之装饰模式Java实现和UML类设计图
代码为博客的例子,详细讲解参考:http://blog.csdn.net/lmj623565791/article/details/24116745 有问题请留言
此代码简单的模拟了超市的促销策略,有打折、返钱等操作!针对商场中出现的各种各样的促销策略,很方便的便可实现策略的拓展!
JAVA设计模式例程-策略模式,在项目中除工厂模式外就数策略模式用得最多了。源程序,可以研究下。不过没有反射,策略模式结合反射的话,基本上就是一个插件架构。可扩展性超强。