
设计模式
文章平均质量分 84
鱼竿钓鱼干
万丈高楼平地起,勿在浮沙筑高台
展开
-
[设计模式] Proxy
Proxy 推荐阅读 C++ 设计模式 目录 动机 在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等), 直接访问会给使用者、或者系统结构带来很多麻烦。 如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。 模式定义 为其他对象提供一种代理以控制(隔离,使用接口)对这对象的访问。 ——《设计模式》GoF 结构设计 这次先看结构设计 Subject是一个接口 本来我们Client创建原创 2022-03-11 07:56:13 · 173 阅读 · 0 评论 -
[设计模式] Factory Method
[设计模式] Factory Method 动机 在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。 如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具体对象创建工作”的紧耦合? 模式定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。 ——《设计模式》GoF SHOW ME THE CODE MainForm1.cpp原创 2022-03-10 19:52:30 · 149 阅读 · 0 评论 -
[设计模式]Flyweight
Flyweight 推荐阅读 C++ 设计模式 目录 动机 在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。 如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作? 模式定义 运行共享技术有效地支持大量细粒度的对象。 ——《设计模式》GoF SHOW ME THE CODE 过去有一种思潮:一切皆对象 但是后来发现如果什么都当作对象也会有缺点,其中一个就是如果有大量细粒度的对象充斥在系统原创 2022-02-22 21:09:40 · 162 阅读 · 0 评论 -
[设计模式] Singleton 模式
Singleton 模式 推荐阅读 C++ 设计模式 目录 动机 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例? 这应该是类设计者的责任,而不是使用者的责任。 模式定义 保证一个类仅有一个实例,并提供一个该实例的全局访问点。 ——《设计模式》GoF SHOW ME THE CODE class Singleton{ private: Singleton();//构造原创 2022-02-22 21:07:56 · 231 阅读 · 0 评论 -
[设计模式] Builder
Builder 模式 推荐阅读 C++ 设计模式 目录 动机(Motivation) 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这 个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。 如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变? 模式定义 将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表原创 2022-02-16 19:45:16 · 376 阅读 · 0 评论 -
[设计模式] Prototype
Prototype 推荐阅读 C++ 设计模式 目录 动机 在软件系统中,经常面临这**“某些结构复杂的对象”**的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。 如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得依赖这些”易变对象“的客户程序不随着需求改变而改变。 模式定义 使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。 ——《设计模式》GoF SHOW ME THE CODE //抽象类 cla原创 2022-02-16 19:43:51 · 126 阅读 · 0 评论 -
[设计模式] Abstract Factory
Abstract Factory 推荐阅读 C++ 设计模式 目录 动机 在软件系统中,经常面临着“一系列相互依赖的对象工作”;同时,由于需求的变化,往往存在更多系列对象的创建工作。 如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合。 模式定义 提供一个接口,让该接口负责创建一系列”相关或者相互依赖的对象“,无需指定它们具体的类。 ——《设计模式》GoF SHOW ME THE CODE 以一个数据库查询相关类为例 cla原创 2022-02-16 19:41:27 · 360 阅读 · 0 评论 -
[设计模式] Observer
Observer 推荐阅读 C++ 设计模式 目录 动机 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对 象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。 使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。 模式定义 定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。原创 2022-02-15 20:04:39 · 128 阅读 · 0 评论 -
[设计模式] Template Method
Template Method 推荐阅读 C++ 设计模式 目录 动机 在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。 如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求? 模式定义 定义一个操作中的算法的骨架 (稳定) ,而将一些步骤延迟 (变化) 到子类中。 Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(overri原创 2022-02-15 20:02:27 · 148 阅读 · 0 评论 -
C++ 设计模式 目录
设计模式 推荐阅读 ohmyfish.net 未来更新会先在ohmyfish.net更新,等到一定规模会发到优快云等平台上,如果有修改和补充也会在ohmyfish上进行。 目标 理解松耦合设计思想 掌握面向对象设计原则 掌握重构技法改善设计 掌握GOF核心设计模式 参考资料 GOF的《设计模式》 李建忠的C++设计模式课程 课程笔记来源于李建忠老师的课程 Cpp-Design-Patterns 代码仓库 代码资料取自这位前辈的仓库 感谢前辈们提供的资料,当前版本主要是认识设计模式,所以并没有太多的原创 2022-02-15 19:58:06 · 611 阅读 · 0 评论 -
C++ 设计模式 序章
C++ 设计模式 序章 在本小节,我将通过自己的语言讲所学到的知识展现出来 同时,在此感谢李建忠老师讲解的C++设计模式相关课程,这篇文章主要参考李老师的讲课内容 从介绍一本书开始 GOF四人帮 写了一本书来介绍设计模式其标题为《设计模式-可复用面向对象软件的基础》 那么我们就从书名来介绍设计模式吧 何为设计模式 谈到设计,我们会想到什么? 对于我这样一个没接受过啥艺术熏陶的理工科直男而言,我所想到的词是:优美、高端、富有思想 那么,模式又是什么呢? 在此引用一位建筑大师的话 ”每一个模式描述了一个在原创 2022-02-04 19:59:14 · 680 阅读 · 0 评论 -
[设计模式]Factory Method
Factory Method 动机 在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。 如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具体对象创建工作”的紧耦合? 模式定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。 ——《设计模式》GoF SHOW ME THE CODE MainForm1.cpp class M原创 2022-02-07 19:17:55 · 443 阅读 · 0 评论 -
[设计模式]Decorator 模式
Decorator 模式 动机 过度使用继承来扩展对象的功能,由于继承为类型引入的静态特质,使得这种扩张方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀 如何使对象功能的扩展能够根据需要动态的实现? 同时避免扩展功能的增多带来的子类膨胀问题? 从而使得任何功能扩展变化导致的影响降至最低? 模式定义 动态(组合手段)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个原创 2022-02-07 19:16:45 · 706 阅读 · 0 评论 -
[设计模式] Bridge 模式
Bridge 模式 动机 由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。 如何应对这种“多维度的变化”?如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度? 模式定义 将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。 ——《设计模式》GoF SHOW ME THE CODE 初始代码 bridge1.cpp class Messager{ public: virtual void Login(strin原创 2022-02-07 19:15:39 · 178 阅读 · 0 评论