触碰大师们的思想(二)之 策略模式
来源:互联网 发布:淘宝网的购买流程 编辑:程序博客网 时间:2024/06/06 07:43
如果说,简单工厂模式是创造对象的黑箱盒子(它将创造对象实例的操作封装起来,把操作从客户类中解放出来,客户无需知道工厂是怎样创建的,只要在需要实例的时候调用工厂给的接口方法就可以),那么策略模式就是封装同系列方法的黑箱盒子。
策略模式,针对变化点(策略的变化)进行封装,利用策略实现类们共同的父类,将同系列的方法(策略)在策略容器里统一,通过容器来调度各个策略,客户端只需要使用策略容器的接口方法就可以使用策略了。
我觉得这两个设计模式的设计思路比较相像,
简单工厂模式里,工厂类利用实例们的共同的父类封装他们各自创建实例的行为,但因为它要返回对象,所以客户端需要声明一个类来承接工厂结果(需要:父类+静态工厂类)。
策略模式里,策略容器类利用策略实现类们共同的父类来整合策略,策略通常是一种行为,所以客户端直接使用容器就可以完成使用策略(需要:容器类)。
策略模式实例
上次车生产好了,这次开始卖车了。
从客户的角度出发——买车策略有两个,一个是通过4S店买,一个是通过车站买。
package myDesignPattern02;
策略之父,买车策略:
public abstract class CarStrategy { //抽象方法,规定买车策略统一方法 public abstract void anyWayToBuyCar();}
买车策略A:
public class CarStrategyA extends CarStrategy{ //实现A的买车策略 @Override public void anyWayToBuyCar() { System.out.println("A->通过4S店买车。"); }}
买车策略B:
public class CarStrategyB extends CarStrategy{ //实现B的买车策略 @Override public void anyWayToBuyCar() { System.out.println("B->通过车展直接买车。"); }}
买车策略模式核心——买车策略容器:
public class BuyCarContext { private CarStrategy x; //容器中使用构造器来注入需要的某个策略,实现多个策略选一的整合调度 public BuyCarContext(String str) { try { this.x = (CarStrategy) Class.forName("myDesignPattern02." + str).newInstance(); } catch (Exception e) { System.out.println("非法途径啊~"); } } //提供对外策略接口 public void BuyCar() { x.anyWayToBuyCar(); }}
客户要开始买车了,询问专业人士:
import java.util.Scanner;public class Client { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("少年,你想买车?我给你两个建议。CarStrategyA||CarStrategyB"); String str = null; BuyCarContext bcc=null; while (sc.hasNext()) { str = sc.nextLine(); try { bcc=new BuyCarContext(str); bcc.BuyCar(); } catch (Exception e) { System.out.println("你得是打错了"+e.getMessage()); } } }
代码运行效果:
阅读全文
0 0
- 触碰大师们的思想(二)之 策略模式
- 触碰大师们的思想(一)之 简单工厂模式
- C++编程思想(卷二):设计模式:策略模式
- (二)策略模式
- (二)策略模式
- (二)策略模式
- 读前辈的大话设计模式(二)之策略模式,抒自己的读后感
- 我的Photoshop大师之路(二)
- 设计模式之(二十)策略模式(strategy)
- 设计模式之python版(二)--策略模式
- C++设计模式之二十一:Strategy(策略模式)
- 设计模式之旅(二)--策略模式
- 大话设计模式之二 策略模式(Strategy)
- (二)java设计模式之策略模式
- 设计模式(二)之策略模式
- 设计模式之二:策略模式(Strategy)
- 设计模式之二:策略模式
- 设计模式二之策略模式
- 使用ueditor实现多图片上传案例——Service层(IShoppingService)
- 乐观锁和悲观锁
- LeetCode——十進制轉換為二進制
- 使用ueditor实现多图片上传案例——ServiceImpl层(ShoppingServiceImpl)
- VS2015配置32位boost库
- 触碰大师们的思想(二)之 策略模式
- 使用ueditor实现多图片上传案例——截取字符串层Util(SubString_text)
- 使用ueditor实现多图片上传案例——Servlet层(UploadServlet)
- 项目banner设计网站
- Math 常用的方法
- 使用ueditor实现多图片上传案例——前台数据层(Index.jsp)
- volatile关键字
- 删除ubuntu,安装CentOS 7(原先是windows 8.1、ubuntu双系统)
- GoldenDream-十月