外观模式Python版--牛市股市还会亏钱?

45 篇文章 0 订阅

简介

外观模式为子系统中的一组接口提供了一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

外观模式通过引入一个外观类,由外观类分别调用内部的多个模块来实现功能,从而客户端只需要和外观类交互就可以。
外观模式的目的不是给子系统添加新的功能接口,而是包装已有的功能,为了让外部减少与子系统多个模块的交互,松散耦合。

外观模式的本质就是封装交互,简化调用

示例

股民炒股代码


class Stock1:
    def Sell(self):
        print "Stock 1 sell."
    def Buy(self):
        print "Stock 1 buy."	
    	
class Stock2:
    def Sell(self):
        print "Stock 2 sell."
    def Buy(self):
        print "Stock 2 buy."		
		
class Stock3:
    def Sell(self):
        print "Stock 3 sell."
    def Buy(self):
        print "Stock 3 buy."	

class NationalDebt1:
    def Sell(self):
        print "NationalDebt 1 sell."
    def Buy(self):
        print "NationalDebt 1 buy."
		
class Realty1:
    def Sell(self):
        print "Realty 1 sell."
    def Buy(self):
        print "Realty 1 buy."

if __name__ == "__main__":
    gu1 = Stock1()
    gu2 = Stock2()	
    gu3 = Stock3()		
    nd1 = NationalDebt1()	    
    rt1 = Realty1()		
    gu1.Buy() 
    gu2.Buy() 
    gu3.Buy() 	
    nd1.Sell() 		
    rt1.Sell() 
投资基金代码

class Fund:
    gu1 = None
    gu1 = None	
    gu1 = None
    nd1 = None	    
    rt1 = None
    def __init__(self):
        gu1 = Stock1()
        gu2 = Stock2()	
        gu3 = Stock3()		
        nd1 = NationalDebt1()	    
        rt1 = Realty1()		
    def BuyFund():
        gu1.Buy()
        gu2.Buy()
        gu3.Buy()
        nd1.Buy()	    
        rt1.Buy()
    def SellFund():
        gu1.Sell()
        gu2.Sell()
        gu3.Sell()
        nd1.Sell()	    
        rt1.Sell()
if __name__ == "__main__":
    jijin = Fund()
    jijin.BuyFund()
    jijin.SellFund()	



class SubSystemOne:
    def MethodOne(self):
        print "SubSystem one"
class SubSystemTwo:
    def MethodTwo(self):
        print "SubSystem Two"		
class SubSystemThree:
    def MethodThree(self):
        print "SubSystem Three"
class SubSystemFour:
    def MethodFour(self):
        print "SubSystem Four"	
class Facade:
    one = None
    two = None
    three = None
    four = None
    def __init__(self):
        self.one = SubSystemOne()
        self.two = SubSystemTwo()
        self.three = SubSystemThree()
        self.four = SubSystemFour()
    def MethodA(self):
        print "MethodA() ------- "	
        one.MethodOne()
        two.MethodTwo()
        four.MethodFour()
    def MethodB(self):
        print "MethodB() ------- "	
        two.MethodTwo()
        three.MethodThree()    	
if __name__ == "__main__":
    facade = Facade()
    facade.MethodA()
    facade.MethodB()   	

外观模式的优缺点

优点:

  1. 松散耦合-----松散了客户端与子系统的耦合关系,让子系统内部的模块能更加容易的扩展和维护
  2. 简单易用-----无需了解子系统内部的实现
  3. 更好的划分访问的层次------把需要暴露给外部的功能集中到外观中,隐藏内部的细节
缺点:

  1. 过多的或者不合理的facade容易让人迷惑。到底是调用外观好还是直接调用模块好?

外观模式在什么时候使用最好?

1. 在设计初期,就要将数层之间分离,层之间建立外观。

2. 在开发阶段,子系统因为演进变得越来越复杂

3. 在后期维护阶段,代码思路清晰,比较容易维护。

相关模式

  • 外观模式和中介者模式
中介者模式主要用来封装多个对象之间相互的交互,多用在系统内部的多个模块之间;而外观模式封装的是单向的交互,从客户端访问系统的调用。

在中介者模式的实现里面,需要实现具体的交互功能;而外观模式本身并不实现任何功能,只是组合调用。

中介者模式的目的主要是松散多个模块之间的耦合,把这些耦合关系全部放在中介者中实现。而外观模式主要是简化客户端的调用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值