【第22期】观点:IT 行业加班,到底有没有价值?

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

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

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

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

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

相关文章推荐

《设计模式》学习笔记--外观Facade

1、官方描述:    为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 2、实例讨论:我们可以通过电视机遥控器的作用来理解该模式的价值和...

JAVA设计模式:外观(Facade)

      外观模式为子系统中的一组接口提供一个一致的界面。Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。         网上有许多安保系统应用外观模式的例子...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

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

十、Facade(外观)情景举例:为子系统中的一组接口提供一个一致的界面代码示例:/* 系统中各种类*/class Scanner ;class Parser ;class ProgramNodeBu...

《HeadFrist 设计模式》读书笔记 —— 策略模式

《HeadFrist 设计模式》读书笔记 —— 策略模式出现情形:定义了一个父类鸭子,定义的有叫,游方法,子类有:活鸭子,玩具鸭子等,这时想在父类鸭子中加上飞这个操作,这时会出现情况,活鸭子可以实现叫...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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