设计模式
文章平均质量分 73
bostonAlen
你的渴望是你能力唯一真正的限制
展开
-
常用设计模式(原型模式)-c++版
1、场景 需要从A的实例得到一份与A内容相同,但是又互不干扰的实例的话,就需要使用原型模式 原型模式和建造者模式、工厂方法模式一样,都属于创建型模式的一种。简单的来说,我们使用原型模式,就是为了创建对象。但是,在以下场景下,使用原型模式是最好的选择: 当我们的对象类型不是开始就能确定的,而这个类型是在运行期确定的话,那么我们通过这个类型的对象克隆出一个新的对象比较容易一些; 当我们需要一个对象在某个状态下的副本,此时,我们使用原型模式是最好的选择;例如:一个对象,经过一段处理之后,其内部的状态发生了变化;这原创 2021-07-29 16:25:42 · 351 阅读 · 0 评论 -
常用设计模式(单件模式-工厂模式demo)-c++版
1、定义 保证一个类仅有一个实例,并提供该实例的全局访问点。 2、示例 原始的单例模式 单例模式要做如下事情: 不能通过构造函数构造,否则就能够实例化多个。构造函数需要私有声明 保证只能产生一个实例 下面是一个简单的实现: class Singleton { private: static Singleton *instance; Singleton(){}; public: static Singleton *getInstance() { if原创 2021-07-29 16:07:15 · 315 阅读 · 0 评论 -
常用设计模式(装饰模式)-c++版
1、动机 (a)在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。 (b)如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能扩展变化”所导致的影响将为最低? 2、定义 单一职责模式,动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活转载 2021-07-21 17:23:05 · 152 阅读 · 0 评论 -
常用设计模式(观察者模式)-c++版
1、动机 (a)在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。 (b)使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。 2、定义 定义对象间的一种一对多(变化)的依赖关系,以便当一个 对象(Subject)的状态发生改变时,所有依赖于它的对象都 得到通知并自动更新。 3、示例 注意:这里是伪代码 场景:做一原创 2021-07-21 16:42:15 · 170 阅读 · 3 评论 -
设计模式介绍及面向对象设计原则
1、设计模式达到的目标 (a)理解松耦合设计思想 (b)掌握面向对象设计原则 (c)掌握重构技法改善设计 (d)掌握GOF 核心设计模式 2、什么是设计模式 Christopher Alexander: “每一个模式描述了一个在我们周围不断重复发生的问题, 以及该问题的解决方案的核心。这样,你就能一次又一次 地使用该方案而不必做重复劳动” 3、GOF 设计模式 • 历史性著作《设计模式:可复用面向对象软 件的基础》一书中描述了23种经典面向对象 设计模式,创立了模式在软件设计中的地位。 • 由于《设计模式》转载 2021-07-21 16:28:09 · 214 阅读 · 0 评论 -
常用设计模式(策略模式)-c++版
1、动机 (a)在软件构建过程中,某些对象使用的算法可能多种多样,常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。 (b)如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题? 2、定义 定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。 3、举例 有这样一个场景,我们需要计算中国、美国、德国的国家税法,有一个SalesOrder类,我原创 2021-07-19 16:46:51 · 146 阅读 · 0 评论