设计模式系列之八外观模式
2016-12-17 16:49
204 查看
外观模式:提供了一个统一的接口,用来访问子系统的一群接口。外观定义了一个高层接口,让子系统更容易使用。
下面通过一个图来说明外观模式的使用,此图来自于《Head First设计模式》一书。
![](http://img.blog.csdn.net/20161217164917772?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXpmOTEzMjE0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
从上图中可以看到,通过一个统一的Facade来调用复杂的子系统的类。
按我的理解,外观模式实际上就是抽取一些公共的业务逻辑封装起来,以统一的方法来调用。使代码结构更加清晰,易于维护,避免流水代码。
举一个简单的例子,下班回家三件事:开门、开灯、开电视。上班出门要干三件事:关电视、关灯、关门。
上一篇:设计模式系列之七适配器模式
下面通过一个图来说明外观模式的使用,此图来自于《Head First设计模式》一书。
从上图中可以看到,通过一个统一的Facade来调用复杂的子系统的类。
按我的理解,外观模式实际上就是抽取一些公共的业务逻辑封装起来,以统一的方法来调用。使代码结构更加清晰,易于维护,避免流水代码。
举一个简单的例子,下班回家三件事:开门、开灯、开电视。上班出门要干三件事:关电视、关灯、关门。
流水线似的写法
public class Door { //开门 public void open(){ } //关门 public void close(){ } }
public class Light { //开灯 public void on(){ } //关灯 public void off(){ } }
public class TV { //开电视 public void on(){ } //关电视 public void off(){ } }
public class TestOld { public static void main(String[] args) { // TODO Auto-generated method stub Light light = new Light(); Door door = new Door(); TV tv = new TV(); //回家的业务逻辑 door.open(); light.on(); tv.on(); //出门的业务逻辑 tv.off(); light.off(); door.close(); } }
使用外观模式进行封装
//外观模式的实现 public class Facade { TV tv; Light light; Door door; public Facade(Door door,Light light,TV tv){ this.tv = tv; this.light = light; this.door = door; } //封装回家的业务逻辑 public void goHome(){ door.open(); light.on(); tv.on(); } //封装出门的业务逻辑 public void goOut(){ tv.off(); light.off(); door.close(); } }
public class TestNew { public static void main(String[] args) { // TODO Auto-generated method stub Light light = new Light(); Door door = new Door(); TV tv = new TV(); Facade facade = new Facade(door,light,tv); /* 1.对于后期的运维人员,只需要知道这两个方法要干的事情即可,而不需要点开看里面的具体实现逻辑 * 2.如果是流水线的写法,则需要完完整整的把所有逻辑从头看到尾 * 3.这样的写法让代码结构更清晰 * 4.如果业务逻辑有变更,只需要修改对应的封装即可,而不需要去修改散落着各处的代码 * */ //回家逻辑 facade.goHome(); //出门逻辑 facade.goOut(); } }
上一篇:设计模式系列之七适配器模式
相关文章推荐
- 设计模式系列之七:外观模式
- Android重拾设计模式系列——外观模式
- C# 设计模式系列教程-外观模式
- 深入理解JavaScript系列(30):设计模式之外观模式
- 深入理解JavaScript系列(30):设计模式之外观模式
- 深入理解JavaScript系列(30):设计模式之外观模式
- 设计模式系列八 外观模式介绍
- iOS 设计模式系列:Facade – 外观模式
- 设计模式总结篇系列:外观模式(Facade)
- 设计模式系列-外观模式
- 深入理解JavaScript系列(30):设计模式之外观模式
- C#设计模式系列:外观模式(Facade)
- 极速理解设计模式系列:13.外观模式(Facade Pattern)
- 深入理解JavaScript系列(30):设计模式之外观模式详解
- 极速理解设计模式系列:13.外观模式(Facade Pattern)
- 设计模式学习系列九:外观模式(Facade)
- 设计模式学习系列9 外观模式Facade
- 深入理解JavaScript系列(30):设计模式之外观模式
- Java设计模式菜鸟系列(九)外观模式建模与实现
- PHP设计模式系列 - 外观模式