引言
在面向東西編程(OOP)的世界裏,計劃形式是處理罕見成績的有效方法,它們可能幫助開辟者編寫愈加模塊化、可保護跟可擴大年夜的代碼。除了廣為人知的23種經典計劃形式(A級計劃形式)之外,另有一些不那麼罕見但同樣重要的B級計劃形式。本文將深刻剖析這些B級計劃形式,幫助開辟者更好地懂得跟利用它們,以輕鬆駕馭複雜項目。
B級計劃形式剖析
1. 命令形式(Command Pattern)
不雅點:命令形式將懇求封裝為一個東西,從而容許用戶利用差其余懇求、行列或日記來參數化其他東西。命令形式也支撐可打消的操縱。
利用處景:當你須要將收回懇求的東西跟履行懇求的東西解耦時,或許須要支撐打消操縱時。
實現:
class Command:
def execute(self):
pass
class Light:
def turn_on(self):
print("Light turned on")
class LightOnCommand(Command):
def __init__(self, light):
self.light = light
def execute(self):
self.light.turn_on()
# 利用
light = Light()
command = LightOnCommand(light)
command.execute()
2. 拜訪者形式(Visitor Pattern)
不雅點:拜訪者形式容許你將算法利用於一組東西,而無需改變這些東西的類。
利用處景:當你須要遍歷東西構造,且操縱須要與東西構造分別時。
實現:
class Element:
def accept(self, visitor):
pass
class ConcreteElementA(Element):
def accept(self, visitor):
visitor.visit_concrete_element_a(self)
class ConcreteElementB(Element):
def accept(self, visitor):
visitor.visit_concrete_element_b(self)
class Visitor:
def visit_concrete_element_a(self, element):
pass
def visit_concrete_element_b(self, element):
pass
# 利用
visitor = Visitor()
element_a = ConcreteElementA()
element_b = ConcreteElementB()
element_a.accept(visitor)
element_b.accept(visitor)
3. 備忘錄形式(Memento Pattern)
不雅點:備忘錄形式容許在不裸露東西外部細節的情況下保存跟恢復東西之前的狀況。
利用處景:當你須要保存東西的歷史狀況以便之後恢復時。
實現:
class Memento:
def __init__(self, state):
self._state = state
def get_state(self):
return self._state
class Originator:
def __init__(self, state):
self._state = state
def save_state_to_memento(self):
return Memento(self._state)
def get_state_from_memento(self, memento):
self._state = memento.get_state()
# 利用
originator = Originator("Initial state")
memento = originator.save_state_to_memento()
originator.get_state_from_memento(memento)
4. 察看者形式(Observer Pattern)
不雅點:察看者形式定義了一種一對多的依附關係,當一個東西的狀況改變時,全部依附於它的東西都掉掉落告訴並主動更新。
利用處景:當你須要實現變亂監聽器或察看者模型時。
實現:
class Subject:
def __init__(self):
self._observers = []
def attach(self, observer):
self._observers.append(observer)
def detach(self, observer):
self._observers.remove(observer)
def notify(self):
for observer in self._observers:
observer.update()
class Observer:
def update(self):
pass
# 利用
subject = Subject()
observer = Observer()
subject.attach(observer)
subject.notify()
總結
B級計劃形式固然在有名度上不如A級計劃形式,但它們在特定場景下同樣重要。經由過程懂得跟利用這些形式,開辟者可能更好地構造代碼,進步代碼的可保護性跟可擴大年夜性,從而輕鬆駕馭複雜項目。