哈哈~今天要和在国外读书的同学有约。兴奋之余了解到那个同学读的信息管理都是编程序。瞬间ORZ,顺便YY今天中午吃饭的场景“Leo,借我1000块钱吧?”,“啊,给你凑个整数,给你1024吧”........
好嘞~~段子还是要讲的,知识还是要学的。今天梳理一下门面模式(也称为外观模式 )。
讲这个之前一如既往给出度娘的定义:门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。
那么?啥意思嘞?我又开始脑补场景了。有一天我中彩票了,哈哈,没错我中彩票了。接着我想满足我在家中就能像看电影一样看美剧or动漫的愿望。于是我买了2016P 的84寸电视机,买了3D蓝光DVD,买了video的功放机,买了多源多媒体的音响......行了,满足购了。然后问题来了,如果我想看番的话,需要干以下几步:泡一杯咖啡,关灯,拉窗帘,打开电视,打开DVD,打开音响,放进去DVD......好烦呀~对于我这么一个能偷懒的人,肯定不会干这么麻烦的事情呀。所以我想如果有一个万能遥控器,能设计一套流程,当我做到沙发上时候,点开一个开关,只要一个开关,一切的事情都能解决了。当软件的前辈们有这种想法的时候,门面模式也就出现咯~
接着上面这个例子,说起这种模式。它尽可能的让外界保持不变,开放一个类作为调用其他类的接口,而别的类的情节。我们外人或者说除了软件开发者之外的其他人不需要知道细节,知道了也是麻烦。
但是再请大家像一下,这么做方便了外人,但是对整个系统是否有利?对的!通过这种包装,虽然外人调用起来显得很容易,但是无意之间缺使得知道系统内部细节的人变得很少,也就是说系统的维护和扩展也变得麻烦起来。不符合面向对象的开闭原则。我想说明的是:并不是每一个设计模式都能做到十全十美,所以选模式时候要考虑实际的情况,如果真的有一个家庭影院的全能遥控器,那么电视机坏了,下一步该怎么做呢?
家庭影院的例子的类图和python如下:
class TV:
def turn_on(self):
print 'turn on TV'
def turn_off(self):
print 'turn_off TV'
class DVD:
def turn_on(self):
print 'turn on DVD'
def turn_off(self):
print 'turn_off DVD'
class amplifier:
def turn_on(self):
print 'turn on amplifier'
def turn_off(self):
print 'turn_off amplifier'
class audio:
def turn_on(self):
print 'turn on audio'
def turn_off(self):
print 'turn_off audio'
class Home_theater:
def __init__ (self,TV,DVD,amplifier,audio):
self.TV=TV
self.DVD=DVD
self.amplifier=amplifier
self.audio=audio
def turn_on(self):
self.TV.turn_on()
self.DVD.turn_on()
self.amplifier.turn_on()
self.audio.turn_on()
def turn_off(self):
self.TV.turn_off()
self.DVD.turn_off()
self.amplifier.turn_off()
self.audio.turn_off()
if __name__=='__main__':
tv= TV()
dvd=DVD()
amplifier=amplifier()
audio=audio()
my_theater=Home_theater(tv,dvd,amplifier,audio)
my_theater.turn_on()
my_theater.turn_off()