设计模式C++实现
进军软件架构师,设计模式乃是必经之路!
alibli
这个作者很懒,什么都没留下…
展开
-
设计模式七大原则与SOLID原则
其中,单一职责原则、开闭原则、迪米特法则、里氏代换原则和接口隔离原则就是我们平常熟知的。尽量使用合成/聚合,而不是通过继承达到复用的目的。一个软件实体应当尽可能少的与其他实体发生相互作用。所有引用基类的地方必须能透明地使用其子类的对象。类之间的依赖关系应该建立在最小的接口上。一个类只负责一个功能领域中的相应职责。依赖于抽象,不能依赖于具体实现。对扩展开放,对修改关闭。原创 2023-06-01 11:29:10 · 89 阅读 · 0 评论 -
行为型——访问者模式C++实现
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。client存储所有product的集合,然后client当accept不同的访问者visitor时,实际执行的是该visitor对所有product的visit操作。原创 2023-05-31 16:58:16 · 94 阅读 · 0 评论 -
行为型——模板方法模式C++实现
是一种行为设计模式,它在超类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。模板方法超类定义了固定的处理步骤,子类定义了某一个或几个步骤的特定实现。原创 2023-05-31 16:10:36 · 48 阅读 · 0 评论 -
行为型——策略模式C++实现
是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。原创 2023-05-31 16:03:46 · 73 阅读 · 0 评论 -
行为型——状态模式C++实现
ForumAccount内包含一个状态AbstractState,ForumAccount执行具体命令时实际上是AbstractState执行具体命令,而AbstractState是基类,会根据积分在PrimaryState、MiddleState和HighState之间切换。因为AbstractState要切换状态,所以AbstractState要包含ForumAccount对象,切换状态时是ForumAccount对象set_state。但后期可能会造成臃肿。原创 2023-05-31 15:46:37 · 118 阅读 · 2 评论 -
行为型——观察者模式C++实现
观察者模式是一种订阅机制,当对象事件发生时通知多个观察者。事件订阅者——监听者。原创 2023-05-31 11:50:56 · 51 阅读 · 0 评论 -
行为型——备忘录模式C++实现
Editor外面封装一层Command,Command可执行备份、恢复,对应Editor的备份、恢复。快照,允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。即Snapshot类。原创 2023-05-31 11:34:19 · 67 阅读 · 0 评论 -
行为型——中介者模式C++实现
像是现实中的房东和租客之间可以是链家等中介,这样某房东可以通过中介获取所有租客信息,某租客也可以通过中介获取所有房东信息。没有中介,某房东只能一个一个租客去问,比较混乱。该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。原创 2023-05-31 11:02:23 · 52 阅读 · 0 评论 -
行为型——迭代器模式C++实现
迭代器是一种行为设计模式,让你能在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。原创 2023-05-31 10:24:57 · 59 阅读 · 0 评论 -
行为型——命令模式C++实现
命令是一种行为设计模式,它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。指令实现Command抽象基类,对应指令execute()方法执行的是对象的对应方法。这里Television作为Command的成员对象,具体Command在execute()时调用的是Television的方法。本例中,我们用遥控器(Controller)控制电视(TV)。将Command保存为Controller的成员对象。原创 2023-05-30 20:18:06 · 48 阅读 · 0 评论 -
行为型——责任链模式C++实现
责任链是一种行为设计模式,允许你将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者。在本例中,员工申请处理票据需要上报给上级,如果上级无权处理就上报给更高的上级。原创 2023-05-30 19:54:09 · 54 阅读 · 0 评论 -
创建型——代理模式C++实现
Proxy和Service继承同一个interface,所以可以互换。Service作为Proxy的一个成员变量,Client通过调用Proxy,Proxy就调用对应的Service接口,Proxy就是个中间层。如上,先创建一个Service原型,然后根据该Service实例创建Proxy,然后Client(TVManager)传入Proxy间接调用Service。适配器能为被封装对象提供不同的接口,代理能为对象提供相同的接口,装饰则能为对象提供加强的接口。原创 2023-05-30 17:43:38 · 48 阅读 · 0 评论 -
创建型——享元模式C++实现
它摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态, 让你能在有限的内存容量中载入更多对象。享元——享元工厂——享元缓存池。比如网盘中某个电影,实际上只有一份(享元),但是每个用户存的时间等信息是各不相同的。在本例中,享元模式能有效减少在画布上渲染数百万个树状对象时所需的内存。这里的TreeType如果享元池里有就直接取,不会再new。TreeType作为享元。原创 2023-05-30 16:19:28 · 49 阅读 · 0 评论 -
创建型——外观模式C++实现
计算机本身是一个及其复杂的系统,我们通过外观模式屏蔽电脑开机这一动作背后复杂子系统的运作。为程序库、框架或其他复杂类提供一个简单的接口。原创 2023-05-30 15:27:39 · 44 阅读 · 0 评论 -
创建型——装饰模式C++实现
将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。原创 2023-05-30 15:24:16 · 52 阅读 · 0 评论 -
创建型——组合模式C++实现
声明简单和复杂对象的通用操作。原创 2023-05-30 14:40:56 · 52 阅读 · 0 评论 -
结构型——桥接模式C++实现
将继承改为组合,可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。将Color作为Pen的一个属性。原创 2023-05-30 11:37:04 · 42 阅读 · 0 评论 -
结构型——适配器模式C++实现
【代码】结构型——适配器模式C++实现。原创 2023-05-30 10:07:29 · 38 阅读 · 0 评论 -
创建型——单例模式C++实现
这就是双重检验锁,保障了线程安全。第一个判空可加速判断是否已有单例,第二个锁内的判空是为了解决多线程问题(两个线程同时走到lock,且instance_都为nullptr)。Meyers' Singleton是Scott Meyers提出的C++单例的推荐写法。类初始化就创建单例,GetInstance()只是获取动作,“饿”。单例模式即保证一个类只有一个实例,并提供一个访问该单例的接口。需要C11支持(C11保证static成员初始化的线程安全)用的时候才创建单例,“懒”。原创 2023-05-29 16:14:05 · 873 阅读 · 0 评论 -
创建型——原型模式C++实现
原型模式即Clone方法深拷贝已有对象,返回新对象。原创 2023-05-29 15:13:54 · 30 阅读 · 0 评论 -
创建型——生成器模式C++实现
生成器模式的核心是分步骤创建复杂的对象,该模式使用相同的创建代码生成不同类型的对象。比如奔驰和奥迪Builder生产车都需要设置轮胎、方向盘和发动机。那么建立一个Director指挥者,传入不同的Builder,Director执行相同的生产车的流程,但调用的是传入的Builder的方法实现。原创 2023-05-29 12:25:26 · 149 阅读 · 0 评论 -
创建型——抽象工厂模式C++实现
相比于工厂方法模式,抽象工厂模式每个工厂可以生产多种产品(比如电影和书籍)。原创 2023-05-29 11:14:52 · 66 阅读 · 0 评论 -
创建型——工厂方法模式C++实现
工厂基类和产品基类,具体类型工厂生产对应具体类型的产品。原创 2023-05-29 10:50:05 · 68 阅读 · 0 评论