大话设计模式
cdknight_happy
种一棵树最好的时间是十年前,其次是现在!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
简单工厂模式
核心思想面向对象编程三大特性:封装、继承、多态。在很多工作中,需要设定基类和派生类,根据实际的应用场景,需要基类指针指向派生类对象,因此需要根据传递的参数类型来决定基类指针具体指向哪一类派生对象。可以将根据输入的参数类型new对应对象的过程封装成一个单独的类 ,这就是简单工厂模式的核心思想。原创 2018-04-07 22:10:05 · 216 阅读 · 0 评论 -
状态模式
1 核心思想状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。第一句话的意思是,状态模式中将各状态都封装成了独立的类,并将动作委托到代表当前状态的对象,因此行为会随着内部状态的改变而改变。第二句话的意思是,从客户的视角来看,如果使用的对象能够改变它的行为,那么客户可能会觉得是从别的类实例化而来的。然而实际上,我们自己知道是在使用组合通过简单引用不...原创 2019-08-09 22:29:29 · 265 阅读 · 0 评论 -
外观模式
1 核心思想外观模式提供了一个统一的接口,用来访问子系统的一群接口。外观定义了一个高层接口,让子系统更容易使用接口。外观模式的意图是提供一个简单的接口,好让一群子系统更易于使用。外观模式不只是简化了接口,也将客户从组件的子系统中解耦。上面的类图中就是客户端不直接调用6个具体类的接口,而是调用外观模式简化后的接口,这样客户端调用过程被简化了,当然如果客户端需要直接调用具体类的接口也是可以的。...原创 2019-08-06 20:19:02 · 451 阅读 · 0 评论 -
适配器模式
1 核心思想适配器模式将一个类的接口,转换为客户期望的另一个接口。适配器可以让原本接口不相容的类可以合作无间。软件开发中,当系统的数据和行为都正确,但接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。适配器模式就是在被适配者外层封装一层新的接口,这个新的接口适配于调用者,新的接...原创 2019-08-06 18:20:52 · 241 阅读 · 0 评论 -
组合模式
1 核心思想组合模式(Composite),将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。2 什么时候用组合模式及注意事项当需求中需要体现部分和整体的层次结构,以及希望用户可以忽略组合对象和个体对象的不同,统一地使用组合结构中的所有对象时,就应该考虑使用组合模式。组合模式就是实现了一个大而全的基类,这个基类包含个体对象和组合对象...原创 2019-08-08 17:19:31 · 292 阅读 · 0 评论 -
命令模式
1 核心思想命令模式(command),将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化;可以对请求排队或记录请求日志;以及支持请求撤销的操作。2 示例代码#include <iostream>#include <list>#include <mutex>class Receiver{public: void BakeMut...原创 2019-08-05 14:03:56 · 167 阅读 · 0 评论 -
单例模式
1 核心思想单例模式确保一个类只有一个实例,并提供一个全局访问点。单例模式产生的对象具有全局变量的特点,在任何位置都可以通过接口获取到那个唯一实例;具体运用场景如:设备管理器,系统中可能有多个设备,但是只有一个设备管理器,用于管理设备驱动;数据池,用来缓存数据的数据结构,需要在一处写,多处读取或者多处写,多处读取;2 单例模式的实现2.1 饿汉式饿汉式就是静态成员直接初始化,这样...原创 2019-08-04 19:05:03 · 451 阅读 · 0 评论 -
观察者模式
1 核心思想观察者模式定义了一种一对多依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。2 UML类图观察者模型用于...原创 2019-07-31 14:33:22 · 284 阅读 · 0 评论 -
抽象工厂模式
1 核心思想抽象工厂模式,提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。抽象工厂包含了一个接口AbstractFactory,所有的具体工厂都需要实现该接口,这个接口包含一组方法来生产产品。具体工厂ConcreteFactory1和ConcreteFactory2实现不同的产品家族。要创建一个产品,客户只需要使用其中的一个工厂而完全不需实例化任何产品对象。Abst...原创 2019-08-03 21:29:32 · 246 阅读 · 0 评论 -
模板方法模式
1 核心思想模板方法模式:在父类中定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式通过将不变行为移动到父类,去除子类中的重复代码来体现它的优势。模板方法提供了一个很好的代码复用平台。当不变的行为和可变的行为在方法的子类中混合在一起时,不变的行为就会在子类中重复出现。我们可以通过模板方法模式把这些行为搬到...原创 2019-02-17 17:38:30 · 269 阅读 · 0 评论 -
工厂方法模式
1 核心思想工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。简单工厂模式的优缺点:优点:简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。比如在使用简单工厂模式实现计算器时,客户端不需要关心该使用哪个类的实例,只需要把‘+’给工厂,工厂自动就给出了...原创 2019-01-31 11:52:34 · 553 阅读 · 0 评论 -
代理模式
1 核心思想代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy代替;RealSubject类,定义Proxy所代表的真实实体;P...原创 2019-01-30 17:57:27 · 201 阅读 · 0 评论 -
UML类图
1 UML类图类图属于UML结构型图中的一种,用于解释不同类之间的关系。UML类图如下图所示:类图分三层;第一行 &amp;amp;quot;Class1&amp;amp;quot;表示类名,如果是抽象类,则用斜体表示;第二行标识了类所拥有的属性;第三行表示类所拥有的方法;&amp;amp;quot;+“表示public,”-“表示private,”#&amp;amp;quot;表示protected。UML原创 2019-01-23 17:00:20 · 420 阅读 · 0 评论 -
原型模式
1 核心思想原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。一般在初始化的信息不发生变化的情况下,克隆是最好的办法,这样既隐藏了对象创建的细节,又对性能是大大的提高。性能提高主要表现在使用克隆就不再需要执行构造函数,可以有效提示执行效率。深拷贝 vs. 浅拷贝:若原型类中包含自定义...原创 2019-01-31 17:46:13 · 192 阅读 · 0 评论 -
单一职责原则 + 开放封闭原则 + 依赖倒转原则 + 迪米特法则
1 单一职责原则就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会造成脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。软件设计真正要做的内容,就是发现职责并把那些职责相互分离。其实要去判断是否应该分离出类来也不难,那就是如果你能够想到多于一个动机去改变一个类,那么这个类就...原创 2019-01-25 16:08:25 · 651 阅读 · 0 评论 -
装饰模式
概念装饰模式,动态的给一个对象增加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。UML类图Component是定义一个对象接口,可以给这些对象动态的添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一定的职责。Decorator,装饰抽象类,继承了Component,从外类来扩充Component类的功能,但对于Compone...原创 2019-08-03 08:28:40 · 258 阅读 · 0 评论 -
策略模式
核心思想 策略模式:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。原创 2018-04-07 23:08:49 · 227 阅读 · 0 评论 -
迭代器模式
1 核心思想迭代器模式提供了一种方法顺序访问一个聚合对象中的各种元素,而又不暴露其内部表示。什么时候用迭代器模式?当需要访问一个聚集对象,而且不管这个对象是什么的时候都需要遍历(比如对象是数组、链表、map或list),就应该考虑使用迭代器模式;当然这里说的是需要访问同时两类不同的聚集。当需要对聚集使用不同的遍历方式时,应该考虑使用迭代器模式。总之,需要对不同的聚集同时进行遍历或者对同...原创 2019-08-07 19:33:02 · 165 阅读 · 0 评论
分享