码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之外观模式

时间:2017-04-25 16:53:45      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:display   低耦合   提高   调用   facade   产生   关系   移植   系统   

  外观模式,属于结构型设计模式,它向现有的系统提供了一个接口来隐藏系统的复杂性,符合迪米特法则,目的是降低耦合。

  定义:为子系统的一组接口提供一个统一的入口,定义一个高层接口,这个接口是的这个子系统更加容易使用。

  问题描述:在开发过程中,一个对象与另一个复杂对象的子对象之间产生耦合,导致了这个对象会随着子对象的变化而变化,后期修改的难度会增加。

  解决方案:将复杂对象的子对象和其它对象之间的依赖进行解耦,简化它们之间的交互接口。

  结构图

技术分享

  

  举个栗子:讲一个画画的故事。。。

  我们现在有三支笔(Pen),毛笔(Brush)写字、铅笔(Pencil)素描和画笔(Paint)绘图,它们拥有一个共同的功能---draw(),现在我们要在代码的世界里来描述这样的功能。一般的实现方式如下:

  1. 新建一个共有的接口Pen,定义一个绘制方法draw(),具体让子类去实现。代码如下:

          技术分享

  2. 分别新建毛笔类Brush、铅笔类Pencil和画笔类Paint,均实现接口Pen中的方法。代码如下:

          技术分享

          技术分享

          技术分享

  3. 在类FacadeFragment中分别使用三个对象实例来实现相应的绘制功能。代码如下:

          技术分享

  以上我们可以看出,我们需要三个对象才能实现出描述笔的功能,并且使用者与笔类存在很大的依赖性,类与类之间产生了一定的耦合。那么我们如何去降低这些耦合呢?使用外观模式,增加一个外观类作为中间者并提供一个简单的入口,将绘制功能独立出来。

  4. 新建一个外观类PenFacade,持有三种接口Pen对象的引用,并对外公开绘制方法。代码如下:

         技术分享

  5. 在类FacadeFragment中使用外观类PenFacade的对象实例来实现相应的绘制功能。代码如下: 

         技术分享

  以上,使用外观模式,就将子系统(笔类)独立出来了,它虽然不给系统增加任何新的功能,仅仅是简化了使用者类和子系统之间的调用关系,使得使用者类中减少了处理的对象数目,提高了子系统的移植性,是子系统的使用更加容易些。

 

  优点

  1. 减少类与类之间的相互依赖,降低了耦合;

  2. 减少了使用者类中所需处理对象的数目,使得子系统的使用更加容易。

  缺点:违反了开闭原则。

 

  适用场景

  1. 需要为一个复杂的子系统提供一个简单的入口时;

  2. 使用者类与多个子系统之间存在很大的依赖性时;

  3. 需要降低层与层之间的耦合度时。

 

设计模式之外观模式

标签:display   低耦合   提高   调用   facade   产生   关系   移植   系统   

原文地址:http://www.cnblogs.com/chenxkang/p/6762713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!