【揭秘面向对象编程】B级设计模式全解析,轻松驾驭复杂项目

作者:用户PHPI 更新时间:2025-07-28 08:22:16 阅读时间: 2分钟

引言

在面向对象编程(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级设计模式,但它们在特定场景下同样重要。通过理解和应用这些模式,开发者可以更好地组织代码,提高代码的可维护性和可扩展性,从而轻松驾驭复杂项目。

大家都在看
发布时间:2024-10-31 09:41
1、以前,有一张小小的票放在你面前,你没有投正因那时你不懂得去珍惜,此刻说后悔还来得及感谢上苍再次给你这个投票机会,你必须要投XXX一票!如果必须要问我选取多少票,我愿意是一百万票。2、无意中发现:一个城市的广告重点,已经从不孕不育转。
发布时间:2024-12-11 02:26
天津西站有地铁1号线与6号线]。
发布时间:2024-11-03 21:00
孕妇妈妈们在生孩子的情况下有二种挑选,一个是能够选择顺产,另一个是能够刨腹产,那麼一般刨腹产的机率很大,可是以便小宝宝的发展身心健康,一些妈妈们的亲人会劝孕。
发布时间:2025-05-19 12:27
1. 引言在C语言编程中,factn函数是一个用于计算阶乘的常用函数。阶乘是一个数学概念,表示一个正整数与其所有正整数乘积的结果。例如,5的阶乘(5!)等于5×4×3×2×1,结果为120。本文将深入探讨factn函数的原理,并介绍几种高效。
发布时间:2024-12-11 11:56
成都东站坐动车,买了车票的,那下地铁肯定可以直接进候车室,因为你有车票,拿车票就可以进候车室的。
发布时间:2024-12-11 04:00
很差对于上海人来说,年终奖1000多 补贴就高温费 十一五一发张卡 端午发点粽子 中秋月饼票这些加起来估计也就3000-4000把 没有奖金可言 一个晚班4块钱 就这样了 刚进去的一年2万多 以前交6金的现在改成4金了做了10多年的老员工。
发布时间:2024-10-30 14:07
阑尾炎手术费用的问题,取决于就诊的医院,通常在一级医院有很多科室进行承包,住院费用包干,那么通常的费用是在两千以内。如果选择在三级医院住院,花费应该在500。
发布时间:2024-09-01 04:25
1、历史上有姓何的皇帝,北汉末帝刘继元,本姓就是何姓。 2、刘继元,五代时期北汉君主,被辽朝册封为英武帝,世祖刘旻外孙,睿宗刘钧外甥、养子。少主刘继恩弟。其母刘氏为刘旻之女。 3、刘氏先嫁薛钊,生子继恩,后嫁何氏,生继元,二人都做。
发布时间:2024-12-11 22:10
智慧广场 - 地址:南山区侨香路4068号智慧广场 地铁(蛇口线)侨城北站D出口; 公交 天鹅堡 站,途经公交线路:237。
发布时间:2024-12-10 22:35
长沙地铁运营时间是10小时30分钟根据长沙轨道交通公司的安排,长沙市目前运营的一、二、三、四、五号线,始发站首班车时间为6:30,末班车时间为23:00。每日的运营时间总计为10小时30分钟。以上为常规运营时间安排,在重大节日或者特殊时期发。