HeadFrist设计模式学习之外观模式

原创 2016年05月30日 17:34:51

外观模式定义:

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

外观模式的意图是要提供一个简单的接口,好让一个子系统更容易使用,子系统的接口仍然是对外暴露的,仍可以使用。

demo演示

子系统是一套提供电影播放服务的系统,主要有TV,voicebox,DVD三个类组成,各个类仅有开关等基本方法用于示例演示,例如TV类:

class TV {
public void on()
{
    System.out.println("TV open");
}
public void off()
{
    System.out.println("TV closed");
}
}

其中voicebox类提供了额外的方法toVolume()用于调整音量。

如果我们想使用这个子系统,在看一场电影的过程中,我们需要写下如下的代码:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    voicebox vb=new voicebox();
     new DVD().on();
     new TV().on();
     vb.on();
     vb.toVolume(11);
}

在定义中我们知道,外观模式需要一个高级接口对子系统进行封装,如下:

class Facade {
   DVD dvd;
   voicebox vb;
   TV tv;
   public Facade(DVD dvd,voicebox vb,TV tv) {
    // TODO Auto-generated constructor stub
       this.dvd=dvd;
       this.vb=vb;
       this.tv=tv;
}
   public void WatchMovie()
   {
       dvd.on();
       tv.on();
       vb.on();
       vb.toVolume(11);
   }
}

那么,运行时代码变成:

    public static void main(String[] args) {
        // TODO Auto-generated method stub
         new Facade(new DVD(), new voicebox(), new TV()).WatchMovie();
    }

比较

在上面两段代码中,外观模式仅仅将第一段的代码简单的封装了一下,这样做的好处有两个:

1.使系统更容易使用。这个正是外观模式的意图。

2.使代码更加灵活,如果需要将系统中的TV改为TV2.0,运行时的代码不需要做出任何改变。

新的设计原则——最少知识原则:只和你的密友交谈。

这个原则是为了防止让太多的类耦合在一起,以避免修改系统中的一部分,会影响到其他部分。

为了遵循这个原则,我们应该只调用符合下面规则的类的方法:

  • 该对象本身
  • 被当作方法的参数而传递进来的对象
  • 此方法所创建或实例化的任何对象
  • 对象的任何组件
版权声明:本文为博主原创文章,转载请注明出处

c#设计模式==外观模式

外观模式,是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。   不...
  • hjf161105
  • hjf161105
  • 2017年07月06日 20:53
  • 99

最常用的设计模式---外观模式(C++实现)

外观模式:提供了一个统一的接口,用来访问子系统的一群接口。外观定义了一个高层接口,让子系统更容易使用。目地:让接口变得简单,是为了简化子系统的接口。...
  • lh844386434
  • lh844386434
  • 2014年01月09日 17:25
  • 1666

设计模式 外观模式 一键电影模式

这个模式比较简单,嘿嘿,简单写一下。 老样子,先看 外观模式(Facade Pattern)定义:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用。其实就是...
  • lmj623565791
  • lmj623565791
  • 2014年05月14日 22:51
  • 9337

[设计模式](二)外观模式和建造者模式的区别

网上博客很多使用KFC套餐来做的例子,讲述地不够贴切,觉得容易误导读者,在那个例子中KFC的套餐(ConcretedBulider)的具体内容被消费者(Client)清楚地了解且也是其关心的点,但是在...
  • stephzcj
  • stephzcj
  • 2017年05月22日 16:05
  • 477

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是在现阶段各种第三方 SDK 基本很大概率都会使用外观模式。通过一个外观类使得整个系统...
  • zhao_zepeng
  • zhao_zepeng
  • 2016年07月17日 18:14
  • 3494

JAVA设计模式之门面模式(外观模式)

医院的例子   现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其“分而治之”,把一个系统划分为几个较小的子系统。如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门...
  • jason0539
  • jason0539
  • 2014年04月02日 07:16
  • 26066

【设计模式】学习笔记10:外观模式(Facade)

上一次我们已经知道了适配器模式是如何将一个类的接口转换成另一个符合客户期望的接口了。Java中要做到这一点,必须将一个不兼容接口的对象包装起来,变成兼容的对象。 这次要学的是外观模式. 外观模式是将一...
  • shuangde800
  • shuangde800
  • 2013年08月13日 00:42
  • 2719

Head First 设计模式读书笔记

第一章 设计模式入门 Duck设计原则:把可能变化之处找出来,并独立。                           针对接口编程,实现多态。 把Duck的可能变化的行为独立出来,委托给行为类实...
  • fengyun703
  • fengyun703
  • 2016年05月12日 12:07
  • 459

Unity3d之设计模式(四)外观模式

一、定义 外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 解释:简单来说,客户端需要调用一个特别复杂的子系统中的多个接口,如果直接...
  • qq563129582
  • qq563129582
  • 2016年12月15日 18:24
  • 698

深入浅出设计模式之命令模式、适配器模式、外观模式

命令模式
  • u011531613
  • u011531613
  • 2017年03月22日 20:42
  • 482
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HeadFrist设计模式学习之外观模式
举报原因:
原因补充:

(最多只允许输入30个字)