
常用设计模式 C++
学习设计模式,简单测试了些小代码,供学习。
呆呆狗meng
一只专注于学习进步的呆呆狗
展开
-
【嵌入式c++】设计模式之代理模式(Proxy)
Proxy动机(Motivation)在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。如何在不失去透明操作对象的同事来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。模式定义为其他对象提供一种代理以控制(隔离,使用接口)对这对象的访问。——《设计模式》GoF要点总结Proxy并不一定要求保持接口完整的一致性,只要能够实现间接控制,有时候损及一些透原创 2020-11-03 14:53:32 · 335 阅读 · 0 评论 -
【嵌入式c++】设计模式之观察者模式(Observer)
Observer动机(Motivation)在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。模式定义定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。——《 设计原创 2020-11-03 14:48:20 · 257 阅读 · 0 评论 -
【嵌入式c++】设计模式之装饰者模式(Decorator )
Decorator动机(Motivation)在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能扩展变化”所导致的影响将为最低?模式定义动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成原创 2020-11-03 14:43:34 · 191 阅读 · 0 评论 -
【嵌入式c++】设计模式之策略模式(Strategy)
题目描述: 策略模式动机(Motivation)在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?模式定义定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。——《设计模式》 GoF要点总结Strategy及其子类原创 2020-11-03 14:36:08 · 250 阅读 · 0 评论 -
【嵌入式c++】设计模式之模板模式(Template Method)
Template Method动机(Motivation)在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求?模式定义定义一个操作中的算法的骨架 (稳定) ,而将一些步骤延迟 (变化) 到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写原创 2020-11-03 14:28:44 · 156 阅读 · 0 评论 -
【嵌入式c++】设计模式之工厂模式-抽象工厂模式(Abstract Factory)
Abstract Factory动机(motivation)软件系统中,经常面临着“一系列相互依赖的对象的创建工作”;同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合。模式定义提供一个接口,让该接口负责创建一系列”相关或者相互依赖的对象“,无需指定它们具体的类。——《设计模式》GoF要点总结如果没有应对”多系列对象创建“的需求变化,则没有必要使用Abstrac原创 2020-11-03 14:16:31 · 128 阅读 · 0 评论 -
【嵌入式c++】设计模式之工厂模式-工厂方法模式(Factory Method)
Factory Method动机(Motivation)在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具体对象创建工作”的紧耦合?模式定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。——《设计模式》GoF要点总结Factory Method模式用于隔离原创 2020-11-03 14:09:10 · 162 阅读 · 0 评论 -
【嵌入式c++】设计模式之工厂模式-简单工厂模式(simple Factory)
题目描述:Factory动机(motivation)实例化对象的时候不再使用 new Object()形式,可以根据用户的选择条件来实例化相关的类。对于客户端来说,去除了具体的类的依赖。只需要给出具体实例的描述给工厂,工厂就会自动返回具体的实例对象。模式定义根据需求创建对象的种类。——《设计模式》GoF要点总结有时会和其他模式解和使用,我们无需提供具体的子类类名,只需要提供一个字符串即可得到相应的实例对象。这样的话,当子类的类名更换或者增加子类时我们都无需修改客户端代码,只需要在简单工厂类上原创 2020-11-03 14:02:30 · 162 阅读 · 0 评论 -
【嵌入式c++】设计模式之命令模式(Command)
题目描述:Command动机(Motivation)”行为请求者“与”行为实现者“通常呈现一种”紧耦合“。但在某些场合——比如需要对行为进行”记录、撤销、事务“等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将”行为请求者“与”行为实现者“解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。模式定义将一个请求(行为)封装成一个对象,从而使你可用不用的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。——《设计模式》GoF要点总结Command模式的原创 2020-11-03 13:41:37 · 206 阅读 · 0 评论 -
【嵌入式c++】设计模式之原型模式(Prototype)
题目描述:Prototype动机(motivation)在软件系统中,经常面临这“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得依赖这些”易变对象“的客户程序不随着需求改变而改变。模式定义使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。——《设计模式》GoF要点总结Prototype模式同样用于隔离对象的使用者原创 2020-11-02 17:00:38 · 190 阅读 · 0 评论 -
【嵌入式c++】设计模式之单例模式(Singleton)
设计模式之单例模式(Singleton)Singleton动机(Motivation)+ 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。+ 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?+ 这应该是类设计者的责任,而不是使用者的责任。模式定义保证一个类仅有一个实例,并提供一个该实例的全局访问点。——《设计模式》GoF要点总结+ Singleton模式中的实例构造器可以设置为protected以允许子类派生原创 2020-10-30 16:11:16 · 313 阅读 · 1 评论