设计模式学习——外观模式
很久没有拿出时间来写一些东西了。最近在学习设计模式的内容,收益匪浅,打算写一个系列。
表述
将复杂的子系统内容,整合成简约、学习成本低的接口。
举例
我们早晨出门上班,虽然每天都做得没有感觉复杂,但是在代码中体现,就会是这样:
breadMarker.make();
door.open();
dorr.close();
car.start();//省略插钥匙等等操作
car.run();
……
company.punchCard();
computer.init();
computer.openOffice();
是不是突然发现,每天早晨做的事情,原来这么复杂!那我每次在上班的时候,如果漏掉了一项怎么办(忘记房门钥匙,公司员工卡等)?
可以看出,复杂的子系统对使用者来说,学习成本太高,并且容易出现漏洞。那么我们将这些子系统接口统一起来:
/*
* 上班
*/
public void goToWork(){
breadMarker.make();
door.open();
door.close();
car.start();//省略插钥匙等等操作
car.run();
……
company.punchCard();
computer.init();
computer.openOffice();
}
以后在要“上班”的时候,只要调用goToWork()
方法,就能快捷实现功能,不需要学习那么多的子系统接口。这样降低了学习成本,并且提高效率。
这样,我们就实现了外观模式,并且:我们不将子系统接口阻隔,用户想要实现自定义功能时,依然可以调用子系统的内容,比如不想锁门等等。
总结
外观模式是设计模式中非常简单的一种,在平时编写程序时,我们也会不自觉的将可复用功能代码封装提取。
外观模式:内部整合复杂的子系统接口