设计模式--外观模式

外观模式主要目的是简化接口。

现在假设我们要组装一个家庭影院系统,系统内含有DVD播放器,投影机、自动屏幕、环绕立体声等。

下面就是类图


现在你想看电影,你得先执行下面操作:

1,将灯光调暗,2.打开投影器 3.将投影机的输入切换到DVD,4.将功能输入设置为DVD。。。。。等等很多步骤,写成方法就是下面这样

popper.on();

popper.pop();

lights.dim();

screen,down();

projector.on();

amp.on();

看完电影后,你又得反着运行上面代码一遍进行关闭动作。

下面就通过外观来改造一下了。

public class HomeTheaterFacade{

Amplifier amp;

Tuner tuner;

DvdPlayer dvd;

CdPlayer cd;

Projector projector;

public HomeTheaterFacade( Amplifier amp,Tuner tuner,DvdPlayer dvd,CdPlayer cd,Projector projector){

this.amp = amp;

this.tuner = tuner;

this.dvd = dvd;

this.cd =cd;

this.projector = projector;

}

//这是看电影方法

public void watchMovie(String movie){

popper.on();

popper.pop();

lights.dim();

screen,down();

projector.on();

amp.on();

}

public void endMovie(){

System.out.println("shutting movie theater down...");

popper.off();

lights.on();

screen.up();

//....等等

}

}

//现在看电影就很轻松了,只要调用HomeTheaterFacade的方法即可。

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

ps:设计原则 最少知识原则,只和你的密友谈话。

最少知识原则具体说来就是在对象的方法内,我们应该调用属于以下范围的方法:

1.改对象本身

2.被当做方法参数而传递进来的对象

3.此方法所创建或者实例化的任何对象

4.对象的任何组件。

//比如这是不采用这个原则的方法,这样做的缺点是 :这个方法相当于向另一个对象的子部分发请求(而增加我们直接认识的对象数目)

public float getTemp(){

Thermometer thermometer = station.getThermomenter();

return thermomenter.getThemperature();

}


//这是采用这个原则的方法。采用这个原则也有缺点:虽然减少了对象之间的依赖,降低软件维护成本,但也会导致产生更多“包装类”,以处理与其它组件的沟通,导致复杂度与开发时间,降低运行时性能。

public float getTemp(){

return station.getThemperature();

}

总结就是各个设计模式目的: 装饰者--不改变接口,但加入责任

适配器--将一个接口转成另一个接口

外观--让接口更简单

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户类与子系统的内部复杂性分隔开,使得客户类只需要...
    沉麟阅读 546评论 0 0
  • 目录 本文的结构如下: 什么是外观模式 模式的结构 代码示例 优点和缺点 适用环境 模式应用 模式扩展 补充 一、...
    w1992wishes阅读 649评论 0 1
  • 一、举个栗子小明每天回家都会先打开灯,空气净化器,电热水器烧上水,放上音乐,如果天气热的话,再打开空调。写成代码 ...
    Qi0907阅读 251评论 0 0
  • 文摘一:有些地方外观模式也被叫做门面模式,英文即Facade Pattern,提前说明一下。 试想这种情况,用户添...
    _浅墨_阅读 504评论 0 1
  • 原文地址:LoveDev 外观模式(Facade Pattern):又称为门面模式,为一组接口提供一个统一的入口。...
    KevinLive阅读 458评论 0 2