java设计模式学习(二)策略模式
来源:互联网 发布:photoshop软件破解版 编辑:程序博客网 时间:2024/06/06 19:28
概念:
The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
策略模式定义了一组算法,各自封装,并且可以互相替代。策略算法使得算法和使用算法的客户端非常的独立。也就是实现了算法和使用环境的解耦。
概括一下就是三个词:行为 环境 解耦
类图
角色分析:
Strategy:a family of algorithms的父接口或抽象父类
ConcreteStrategy:a family of algorithms,封装了具体的算法。
Context:即”clients that use it”,持有一个Strategy的引用。可以具体实例化为一个ConcreteStrategy
举例
这个例子是实现商场购物一组优惠算法,包括满额现金赠送、满额减免、折扣、满额积分赠送。为了节省篇幅具体算法没有实现,只是做了一个打印。
/** Strategy*/public abstract class PromotionStrategy { public void promote() { }}
/** ConcreteStrategy1*/public class Derate extends PromotionStrategy { public void promote() { System.out.println("减免"); }}
/** ConcreteStrategy2*/public class Discount extends PromotionStrategy { public void promote() { System.out.println("打折"); }}
/**ConcreteStrategy3*/public class RewardCash extends PromotionStrategy { public void promote() { System.out.println("现金赠送"); }}
/** ConcreteStrategy4*/public class RewardCredits extends PromotionStrategy { public void promote() { System.out.println("积分赠送"); }}
/**Context*/public class Client { PromotionStrategy strategy; public Client(PromotionStrategy strategy){ this.strategy = strategy; } public static void main(String[] args) { Client client = new Client(new Discount()); client.strategy.promote(); }}
这样就实现了一组算法的抽象。
适用场景
多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
0 0
- java设计模式学习(二)策略模式
- Java设计模式《二》策略模式
- java设计模式之二:策略模式
- JAVA设计模式(二十三)----策略模式
- 设计模式学习笔记二十三(Strategy策略模式)
- 大话设计模式学习(二)——策略模式
- 初学者学Java设计模式(二)---------策略模式
- Java设计模式(二)策略模式详解
- (二)java设计模式之策略模式
- Java设计模式学习之一---策略模式
- java设计模式学习之策略模式
- java设计模式学习之策略模式
- java设计模式学习之策略模式
- java设计模式学习之策略模式
- 初学设计模式二(策略模式)
- 设计模式心得(二) 策略模式
- 设计模式(二):策略模式
- 设计模式(二)策略模式
- ps学习历程4
- 内存映射文件原理探索
- 范围查询
- Android轻量级ORM框架ActiveAndroid入门教程
- 12K的offer你不要?你是怎么想的?
- java设计模式学习(二)策略模式
- Linux环境变量操作
- UML基础(终极总结)
- spring(基础五) spring实现后台的任务调度TimerTask和Quartz
- 12、Integer to Roman
- Ember.js 入门指南 (二)
- iOS 序列化与反序列化
- VS 项目中添加 include、lib 库文件
- 第二天:poj1002(虽然完成了题目但是时间太久了。。。加油坚持下去)