设计模式—门面模式

  哈哈~今天要和在国外读书的同学有约。兴奋之余了解到那个同学读的信息管理都是编程序。瞬间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()
        


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值