[Python設計模式] 第12章 基金理財更省事——外觀模式

github地址:https://github.com/cheesezh/python_design_patternspython

題目1

用程序模擬股民直接炒股的代碼,好比股民投資了股票1,股票2,股票3,國債1,房地產1.git

class Stock1():
    def sell(self):
        print("賣出股票1")
    def buy(self):
        print("買入股票1")
        
class Stock2():
    def sell(self):
        print("賣出股票2")
    def buy(self):
        print("買入股票2")
        
class Stock3():
    def sell(self):
        print("賣出股票3")
    def buy(self):
        print("買入股票3")
        
class NationalDebt1():
    def sell(self):
        print("賣出國債1")
    def buy(self):
        print("買入國債1")
        
class Realty1():
    def sell(self):
        print("賣出房地產1")
    def buy(self):
        print("買入房地產1")
        
def user_action():
    """
    模擬股民的操做,股民須要瞭解各個理財產品的走勢,進而買入賣出
    """
    gu1 = Stock1()
    gu2 = Stock2()
    gu3 = Stock3()
    nd1 = NationalDebt1()
    rt1 = Realty1()
    
    gu1.buy()
    gu2.buy()
    gu3.buy()
    nd1.buy()
    rt1.buy()
    
    gu1.sell()
    gu2.sell()
    gu3.sell()
    nd1.sell()
    rt1.sell()
    
user_action()
買入股票1
買入股票2
買入股票3
買入國債1
買入房地產1
賣出股票1
賣出股票2
賣出股票3
賣出國債1
賣出房地產1

題目2

用程序模擬股民經過基金理財的代碼,股民只須要購買&賣出基金便可,不須要對具體的股票等有了解.github

class Fund():
    def __init__(self):
        self.gu1 = Stock1()
        self.gu2 = Stock2()
        self.gu3 = Stock3()
        self.nd1 = NationalDebt1()
        self.rt1 = Realty1()
        
    def sell(self):
        self.gu1.sell()
        self.gu2.sell()
        self.gu3.sell()
        self.nd1.sell()
        self.rt1.sell()
    
    def buy(self):
        self.gu1.buy()
        self.gu2.buy()
        self.gu3.buy()
        self.nd1.buy()
        self.rt1.buy()
        
def user_action():
    """
    模擬股民的操做,股民只須要買進賣出基金便可
    """
    fund = Fund()
    
    fund.buy()
    
    fund.sell()
    
user_action()
買入股票1
買入股票2
買入股票3
買入國債1
買入房地產1
賣出股票1
賣出股票2
賣出股票3
賣出國債1
賣出房地產1

外觀模式

外觀模式,爲子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用[DP]。架構

多個子系統類

class SubSystemOne():
    def method_one(self):
        print("子系統方法1")
        
class SubSystemTwo():
    def method_two(self):
        print("子系統方法2")
        
class SubSystemThree():
    def method_three(self):
        print("子系統方法3")

外觀類

class Facade():
    def __init__(self):
        self.one = SubSystemOne()
        self.two = SubSystemTwo()
        self.three = SubSystemThree()
        
    def method_a(self):
        self.one.method_one()
        self.two.method_two()
        
    def method_b(self):
        self.two.method_two()
        self.three.method_three()

def main():
    facade = Facade()
    
    facade.method_a()
    
    facade.method_b()
    
main()
子系統方法1
子系統方法2
子系統方法2
子系統方法3

點評

外觀模式完美的體現了依賴倒轉原則和迪米特法則的思想,是很是經常使用的模式之一。設計

那麼何時使用外觀模式最好?code

  • 在設計階段,應該有意識的將不一樣的兩個層分離,好比經典的三層架構,須要考慮在數據訪問層和業務邏輯層,業務邏輯層和表示層的層與層之間簡歷外觀模式,這樣能夠爲複雜的子系統提供一個簡單的接口,使得耦合度下降;
  • 在開發階段,子系統每每由於不斷重構演化而變得愈來愈複雜,大多數的模式使用時也都會產生不少很小的類,這本是好事,可是也給外部調用它們的用戶程序帶來了使用上的困難,增長外觀Facade能夠提供一個簡單的接口,減小它們之間的依賴;
  • 在維護階段,可能一個大型的系統已經很是難以維護和擴展,可是由於它包含了重要功能,新的開發需求必須依賴它,此時也可使用外觀模式。能夠爲新系統開發一個Facade類,來提供設計粗糙或高度複雜的遺留代碼的比較清晰簡單的接口,讓新系統和Facade對象交互。
相關文章
相關標籤/搜索