设计模式学习心得<外观模式 Facade>

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

概述


  • 意图

    为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

  • 主要解决

    降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

  • 何时使用
  1. 客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。
  2. 定义系统的入口。
  • 如何解决

    客户端不与系统耦合,外观类与系统耦合。

  • 关键代码

    在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。

  • 应用实例
  1. 去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。
  2. JAVA 的三层开发模式。
  • 优点
  1. 减少系统相互依赖。
  2. 提高灵活性。
  3. 提高了安全性。
  • 缺点

    不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

  • 使用场景
  1. 为复杂的模块或子系统提供外界访问的模块。
  2. 子系统相对独立。
  3. 预防低水平人员带来的风险。
  • 注意事项

    在层次化结构中,可以使用外观模式定义系统中每一层的入口。

实现



我们将创建一个Shape接口和实现了Shape接口的实体类。下一步是定义一个外观类ShapeMaker

ShapeMaker 类使用实体类来代表用户对这些类的调用。FacadePatternDemo,我们的演示类使用ShapeMaker类来显示结果。

  • step 1 创建接口Shape.java
public interface Shape {
   void draw();
}
  • step 2 创建实现接口的实体类

Rectangle.java

public class Rectangle implements Shape {

   @Override
   public void draw() {
      System.out.println("Rectangle::draw()");
   }
}

Square.java

public class Square implements Shape {

   @Override
   public void draw() {
      System.out.println("Square::draw()");
   }
}

Circle.java

public class Circle implements Shape {

   @Override
   public void draw() {
      System.out.println("Circle::draw()");
   }
}
  • step 3 创建外观类 ShapeMaker.java
public class ShapeMaker {
   private Shape circle;
   private Shape rectangle;
   private Shape square;

   public ShapeMaker() {
      circle = new Circle();
      rectangle = new Rectangle();
      square = new Square();
   }

   public void drawCircle(){
      circle.draw();
   }
   public void drawRectangle(){
      rectangle.draw();
   }
   public void drawSquare(){
      square.draw();
   }

   public static void main(String[] args) {
      ShapeMaker shapeMaker = new ShapeMaker();

      shapeMaker.drawCircle();
      shapeMaker.drawRectangle();
      shapeMaker.drawSquare();
   }
}
  • 输出
Circle::draw()
Rectangle::draw()
Square::draw()

原文地址:https://www.cnblogs.com/snifferhu/p/9192778.html

时间: 2024-10-07 04:24:40

设计模式学习心得<外观模式 Facade>的相关文章

设计模式学习心得&lt;适配器 Adapter&gt;

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能. 概述 意图 将一个类的接口转换成客户希望的另外一个接口. 适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 主要解决 主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的. 何时使用 系统需要使用现有的类,而此类

设计模式学习心得----开篇

做了几年的开发工作,还停留在开发工程师的阶段,想着不能一直这样下去,觉得要为自己以后做打算了,开发常规两条路:项目管理,架构师,我选择架构师.之 所以这样选,这是保守的一个选择,用格力的广告“掌握核心科技”,只有掌握了核心技术,核心业务,才能占据主导角色.当然要成为一个合格的架构师,需要学 习的,掌握的东西要非常多,非常全面,也有很多条件,但这是我选架构师的一个最重要条件.既然已经决定了,就要学习自己欠缺的.设计模式就是之一,于是有 了这系列文章,记录学习过程中一些心得和总结. 一:为什么要用设

大话设计模式学习心得

我的理解是建立在C++上的,而书中所用的例子是java的,每一种模式我都会转化为C++中的应用来理解. 1.简单工厂模式: 我的理解是父类定义接口,子类实现接口,外加一个根据输入产生不同子类的函数.如果需要添加新实现时,需要添加子类,和修改工厂函数. 2.策略模式: 简单一点的理解是将工厂函数和父类定义在一个新的类中,那么客户端的代码就会显得简洁一些.比较重要的一点是接口和客户端的耦合度降低了.两个类改为一个类. 3.单一职责原则: 还是耦合度的问题,如果太多的功能集中在一个类中,成员变量数量的

Android学习之适配器Adapter

Adapter是个什么角色呢?其实它的作用就是View界面和数据之间的桥梁.我们可以看作是界面数据绑定的一种理解,它所操纵的数据一般都是一些比较复杂的数据,如数组,链表,数据库,集合等. 常用的适配器有: (1)ArrayAdapter:             数组作为数据源,填充的是ArrayAdapter (2)SimpleAdapter:           List作为数据源,填充的是SimpleAdapter (3)SimpleCursorAdapter: 数据来源一般都是数据库查询

java常用设计模式学习心得

学习自:http://shenzhenchufa.blog.51cto.com/730213/161581 代码来自:http://shenzhenchufa.blog.51cto.com/730213/161581 感谢博主:shenzhenchufa. 学习之余我写一些自己的心得.无心侵犯版权,用于自己学习. ------------------------- strategy(策略模式) -------------------------我们有一个设计原则:找出应用中相同之处,且不容易发生

设计模式学习心得(持续更新)

本博文仅仅是笔者自己的学习路线,归纳整理了一些好的设计模式资料. 1.策略模式 参考资料:c#设计模式-策略模式?c#设计模式之策略模式 ?C#设计模式(20)--策略者模式(Stragety Pattern) 策略模式的实现有解耦的表现--Context类 注意: 如果优化的话,可以使用抽象类,将变化的算法设为抽象方法,或虚方法,这样让子类对该方法进行实现即可,同样可以实现该需求,而且代码重用性应该会更好 2.工厂模式 参考资料:C#设计模式(3)--工厂方法模式 ?C#设计模式(1)--简单

设计模式学习心得&lt;组合模式 Composite&gt;

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式,它创建了对象组的树形结构. 这种模式创建了一个包含自己对象组的类.该类提供了修改相同对象组的方式. 概述 意图 将对象组合成树形结构以表示"部分-整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 主要解决 它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客

大话设计模式学习心得2

1.迪米特法则 类之间的联系越少越好, 2.外观模式 添加一个新的类,包含子类,实现不同的组合,降低与外界的耦合,对旧代码的更新可以适用. 3.建造者模式 和外观模式有些类似吧,实现子类的各种不同的组合,也就是在内部实现接口调用顺序,而在外界只需调用具体的接口. 4.观察者模式 一个类A是观察者类,另一个类B是通知者类,B中调用A的接口,A中有B的通知号,其实耦合度还是很高的,只是有一个事件来到时,B主动调用注册在A中的方法.相当于实现了通知

设计模式学习心得4

1.组合模式 定义一个父类,其中包括所有子类的方法接口,那么对于任何一个子类来说对外界都是封闭的,外界只调用父类的接口,而不知道子类是否有实现. 2.迭代器模式 这个很常见,在C++中常常会用在标准模版类中,它的功能就是遍历一个类中的成员,而外界不知道对象的成员. 3.单例模式 这个模式就是为了只有一个实例,解决方式是将构造函数设置为私有函数,类的实例化使用一个共有静态函数接口.