您的位置:首页 > 编程语言 > Python开发

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

2015-03-09 17:36 211 查看

简介

外观模式为子系统中的一组接口提供了一个一致的界面,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()

外观模式的优缺点

优点:

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

缺点:

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

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

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

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

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

相关模式

外观模式和中介者模式

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

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

中介者模式的目的主要是松散多个模块之间的耦合,把这些耦合关系全部放在中介者中实现。而外观模式主要是简化客户端的调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: