最佳答案
引言
在面向东西编程(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级计划形式,但它们在特定场景下同样重要。经由过程懂得跟利用这些形式,开辟者可能更好地构造代码,进步代码的可保护性跟可扩大年夜性,从而轻松驾驭复杂项目。