设计思想学习—外观模式
2018-01-02 18:58
183 查看
外观模式
记得有一次,我们一起去了一个别墅轰趴,那时候大家都去玩自己想玩的事情,大厅开灯是必须的,看电影的要去小房间开投影仪幕布,玩游戏的要开电脑或者xbox等等。最后玩的筋疲力尽了还要一个个去把他们关掉,那时候就在想如果有一个按钮关掉或者开启所有多好。
直到今天看了外观模式才知道,那个想法就是一个外观模式的思想,把所有开启和关闭的功能全部集中在一个按钮上,我们不需要一个个开启也不需要知道如何开启,只用按一下按钮就能开启关闭。
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
单单看定义其实我也没有很明白,不过看过例子后我突然想起了,我的那次亲身经历。
可以把电脑、灯、xbox等等看成一组,然后我的想法中的那个按钮就是这个一致的界面,通过这个按钮可以方便我们更加方便的开关它们,而不用在跑到一个个房间去检查有没有关掉。
根据上面的想法就很容易看出外观模式的两个角色了:
外观角色(Facade): 为子系统提供一个共同的对外接口,就是上面我想象中的按钮。
子系统角色(SubSystem):实现子系统的功能,就是上面说的电脑、Xbox等。
来看一下UML图
这样就更加简单明了了,Client完全可是看成人,facade就是我想法中的按钮了,那么剩下的子系统类就是电脑、灯、xbox等东西了。下面我们来看下代码实现
class Xbox{ public void start(){ System.out.println("开启Xbox"); } public void close(){ System.out.println("关闭Xbox"); } } class Light{ public void start(){ System.out.println("开启大厅灯"); } public void close(){ System.out.println("关闭大厅灯"); } } class Computer{ public void start(){ System.out.println("开启电脑"); } public void close(){ System.out.println("关闭电脑"); } } class DreamButton{ Xbox xbox; Computer computer; Light light; public DreamButton(){ xbox=new Xbox(); computer=new Computer(); light=new Light(); } public void allStart(){ xbox.start(); computer.start(); light.start(); } public void allClose(){ xbox.close(); computer.close(); light.close(); } } public class Client { public static void main(String[] args) { DreamButton button=new DreamButton(); button.allStart(); button.allClose(); } }
这样子就是通过一个按钮可以解决电器的关闭问题,而不用再去房间里检查哪些东西忘记关闭了。
运用外观模式的好处是:
不需要在去亲自开关电器,放在代码里面来讲就是实现了松耦合的关系
还有一点是现实没有的,实现了依赖倒转和迪米特法则,好处就不在重复
同样的有好就有坏:
如果我还想把空调等电器加入控制,那么我就需要重新设置按钮功能,也是说在代码里面我需要去修改DreamButton这个类,违反了开闭原则。
相关文章推荐
- 【软考学习】设计模式——外观模式
- 设计模式学习笔记-外观模式
- 设计模式学习11——外观模式
- 学习设计模式-外观模式
- 设计模式学习----外观模式
- java设计模式学习笔记--外观模式
- 【设计模式学习笔记十一】【结构型模式】【外观模式(Facade)】
- 设计模式学习笔记(十一)——Facade外观
- 设计模式学习-Facade(外观)
- 设计模式学习笔记(十一)——Facade外观模式
- 设计模式学习笔记(12)——外观模式
- 步步为营 .NET 设计模式学习笔记 十六、Facade(外观模式)
- 学习设计模式的思想
- 设计模式学习--------4.外观模式学习
- 设计模式学习笔记之外观模式
- 步步为营 .NET 设计模式学习笔记 十六、Facade(外观模式)
- 设计模式学习-Facade(外观)
- [学习笔记]设计模式[6]-{适配器模式&外观模式}
- C#设计模式学习小结之六 外观模式