设计模式--外观模式

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

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

下面就是类图


设计模式--外观模式_第1张图片

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

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();

}

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

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

外观--让接口更简单

你可能感兴趣的:(设计模式--外观模式)