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,运行时的代码不需要做出任何改变。

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

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

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

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

相关文章推荐

HeadFrist设计模式学习之状态模式

HeadFrist设计模式学习之状态模式状态模式定义状态模式允许对象在内部改变状态时改变它的行为,对象看起来好像修改了它的类。 状态模式用于当类由于条件语句而使逻辑变得十分复杂并且难于修改时,它将逻辑...

HeadFrist设计模式学习之迭代器模式

HeadFrist设计模式学习之迭代器模式 迭代器模式定义 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部表示 需求:设计一个print类用来打印对象内部的数据(ArryList...

HeadFrist设计模式学习之适配器模式

适配器模式定义: 将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 需求描述: JVM的公园里有很多动物,在必要时会将动物们放置在BOX里面,所以有很多Box...

HeadFrist设计模式源码Java版

  • 2014-01-09 11:48
  • 5.33MB
  • 下载

“设计模式”学习之五:桥接、外观、享元与代理(结构型)

一、桥接(Bridge,别名“Handle/Body”) 1、引言 我们一般的理解是:基类定义抽象接口;子类继承并实现接口。而桥接则是利用组合引用的方式,将抽象接口类Abstaction的功能实现...

设计模式学习笔记(一)--Facade外观模式

GOF《设计模式》一书对Facade模式是这样描述的:        为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。      &#...

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

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

设计模式学习--外观模式

外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.首先,在设计初期阶段,应该有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数...

java设计模式学习笔记--外观模式

生活场景大家可能为了有一台满足自己需求的电脑,你可能会选择自己到各大厂商买配件。自己组装,但是这样需要熟悉硬件,还要考虑他们之间的兼容性。你也可能找到一家装机公司,让他们代理实现。那么这个装机公司就相...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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