博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[设计模式]外观模式
阅读量:6981 次
发布时间:2019-06-27

本文共 2129 字,大约阅读时间需要 7 分钟。

1. 定义

  外观模式 提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更加容易使用。

  外观不仅简化了系统内接口的使用,也将客户从组件中的子系统中解耦,外观和适配器都可以包装很多类,但是外观的意图是简化接口,而适配器的意图是将接口转换成新的需要的接口。

2. 类图

  外观模式的主要目的是简化 子系统中较为复杂或者繁琐的方法调用,将所有方法调用集中到一个方法中,用户只需要和外观类交互即可,不需要知道组件中其他的方法和子对象,符合设计模式的“最少知道”原则。

3. 实现代码

  外观类的代码实现,这是面对客户的入口

/** * Class Facade */public class Facade {  //  // Fields  //  private ClassA classA;  private ClassB classB;  private ClassC classC;  //  // Constructors  //  public Facade () { };  //  // Methods  //  //  // Accessor methods  //  /**   * Set the value of classA   * @param newVar the new value of classA   */  private void setClassA (ClassA newVar) {    classA = newVar;  }  /**   * Get the value of classA   * @return the value of classA   */  private ClassA getClassA () {    return classA;  }  /**   * Set the value of classB   * @param newVar the new value of classB   */  private void setClassB (ClassB newVar) {    classB = newVar;  }/**   * Get the value of classB   * @return the value of classB   */  private ClassB getClassB () {    return classB;  }  /**   * Set the value of classC   * @param newVar the new value of classC   */  private void setClassC (ClassC newVar) {    classC = newVar;  }  /**   * Get the value of classC   * @return the value of classC   */  private ClassC getClassC () {    return classC;  }  //  // Other methods  //  /**   */  public void actionAB()  {    classA.actionA();    classB.actionB();  }  /**   */  public void actionAC()  {    classA.actionA();    classC.actionC();  }  /**   */  public void actionABC() {    classA.actionA();    classB.actionB();    classC.actionC();  }}

  这是外观类持有的子对象,也是子系统的内部对象

/** * Class ClassA */public class ClassA {  //  // Constructors  //  public ClassA () { };  /**   */  public void actionA()  {  }}

  ClassB, ClassC 的代码类似ClassA的代码,此处不做展示。

4. 优势、劣势

  • 客户调用系统不需要繁琐、冗长的代码;
  • 客户不需要知道内部支持的各个步骤,只知道外观类的某个方法可以实现用户的某个目的,通过这样后期改造方法也会变得相对简单;

------------------------

  • 代码中需要多出外观类的代码
  • 不符合开闭原则,需要修改的时候,需要改动外观类代码
  • 对于需要经常定制化调用子组件的各种行为、方法的话,外观类并不适合,这时候应该暴露子类的访问接口供客户使用

5. 应用场景

  1. 为复杂的模块或子系统提供外界访问的模块。

  2. 子系统相对独立。

  3. 预防低水平人员带来的风险。

转载于:https://www.cnblogs.com/zhuangmingnan/p/9460186.html

你可能感兴趣的文章
自定义ListBox,实现单多选切换(复选框)
查看>>
软件测试2019:第八次作业
查看>>
Centos下安装FTP并进行虚拟用户访问方式配置
查看>>
python day09
查看>>
拆系数FFT及其部分优化
查看>>
cocos2dx3.8 ios打包脚本编写
查看>>
wordpress搭建博客上传begin主题The themes is locked to another domain
查看>>
2019-04-16 SpringMVC 学习笔记
查看>>
C10K问题
查看>>
慕课网3-13编程练习:采用flex弹性布局制作页面主导航
查看>>
线程中死锁的demo
查看>>
canvas-7globleCompositeOperation.html
查看>>
Java并发(具体实例)——几个例子
查看>>
【待补】java开发Web Service
查看>>
两个有用的数组扩展方法
查看>>
英语发音规则---H字母
查看>>
js进阶 10-11/12 表单伪类选择器的作用
查看>>
C#中Invoke的用法
查看>>
pxe无人值守安装操作系统
查看>>
UESTC 2014 Summer Training #11 Div.2
查看>>