astron设计模式学习手记之门面模式
来源:互联网 发布:淘宝举报中心网址 编辑:程序博客网 时间:2024/06/06 03:38
门面模式
图解设计模式第15章
facade建筑物的正面
别名:外观模式
如下图,像在线客服对用户而言就是一个门面。它封装了很多业务逻辑。比如客户咨询商品价格问题,客服需要咨询的是销售人员。客户反馈没有收到商品,客服需要联系配送。客服反映商品没开发票,客服需要联系仓储开票人员。遇到领券失败需要咨询市场部,遇到返修退换货需要联系售后部门甚至厂家。有了这个门面,客户不需要直接与内部系统打交道,直接联系客服就好了。
假如说,客服让用户直接联系公司的财务人员,或者厂家,那用户体验就会差到极点。现实当中就有这种例子。
后续:1代理模式和门面模式的区别
思考:按照上面的逻辑,门面模式跟策略模式是不是可以很好结合呢?因为门面模式后面需要不同的策略来执行?比如我们拨打10000号,针对这个门面,我们按照语音提示选择了1-9不同的按键,相当于new 出来了策略,然后走不同的流程就行了。
符合高内聚
可以这么说,凡是用户体验好的,操作简单的都是外观模式:
http://blog.csdn.net/zhangmeihong2/article/details/43097715
背景:股票1、2、3、国债1、房地产1等这些都具有相同的方法:买入、卖出。于是,抽象出一个基金类,基金由以上类聚合而成,那么客户端只需认识基金即可,不需理解其内部,即股票、国债和房地产等。这样一来,就解决了对股票、国债、房地产不熟悉的人的买股问题,他们只需买基金即可,不需要具体知道买的是什么。
特点:一组类似的类(股票一、二、三、国债、房地产)——聚合——一个类(基金)。客户端识别这一个类(基金),即可方便使用这一组类(股票一、二、三、国债、房地产)。
用到的原则:依赖倒转原则和迪米特法则。
优点:1、迪米特法则使得客户端简单;2、便于扩展。
缺点:多定义了一个类。
感受:之所以叫外观模式,可能是因为此模式,不需你具体了解股票、国债、房地产等,只需你知道基金这个表层即可。
导诊员也是门面
参考:linux内核中的门面
http://blog.csdn.net/dog250/article/details/5303231
参考:action和dao
http://blog.csdn.net/zuoxiaolong8810/article/details/9151203
千万要注意:
上代码:
子系统1,这里没有用接口
public class SubSystem1 { public void method1(){ System.out.println("method1"); }}
子系统2
public class SubSystem2 { public void method2(){ System.out.println("method2"); }}
子系统3
public class SubSystem3 { public void method3(){ System.out.println("method3"); }}
用来模拟系统1和3组合起来的流程
public class ComplexSystem13 { private SubSystem1 subSystem1 = new SubSystem1(); private SubSystem3 subSystem3 = new SubSystem3(); public void method13(){ subSystem1.method1(); subSystem3.method3(); System.out.println("在新定义的类中完成了1和3两个流程,流程结束"); }}
最重要的门面
public class Facade { private SubSystem1 subSystem1 = new SubSystem1(); private SubSystem2 subSystem2 = new SubSystem2(); private SubSystem3 subSystem3 = new SubSystem3(); private ComplexSystem13 ComplexSystem13 = new ComplexSystem13(); //这里最好把new放在对象构造方法中 public void doSomething1(){ subSystem1.method1(); } public void doSomething2(){ subSystem2.method2(); } public void doSomething3(){ subSystem3.method3(); } public void doSomethingComplex(){ ComplexSystem13.method13(); }}
客户端,直接与门面打交道。没有调用子类的业务。
public class Client { public static void main(String[] args) { Facade fc =new Facade(); System.out.println("//测试单类方法"); fc.doSomething1(); System.out.println("========================="); System.out.println("//测试复合方法"); fc.doSomethingComplex(); }}
大工告成
下一篇:调停者模式
- astron设计模式学习手记之门面模式
- 设计模式学习之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之-门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- luogu P1006 传纸条
- strtok实现
- C# 开发的网络数据包抓取的的实现
- 什么是自定义MVC框架?
- 访问数据库的技术
- astron设计模式学习手记之门面模式
- hdu 1069 Monkey and Banana
- 如何使用Python处理Missing Data
- 面试题22栈的压入弹出序列
- ASPLOS'17论文导读——SC-DCNN: Highly-Scalable Deep Convolutional Neural Network using Stochastic Computing
- Python 正则表达
- uva 485 Pascal's Triangle of Death
- 你所不知道的Visual Studio监视窗口的使用方法
- 凸优化理论介绍