设计模式
第九棵树
这个作者很懒,什么都没留下…
展开
-
设计模式-结构型-外观模式-c++
本文不讨论外观模式的具体定义 外观模式就是将接口暴露出来提供给用户使用。而且暴露出来的接口通常是封装了其他多个类的方法得到的接口,因此也算是将一些方法进行整合,放到Facade类的接口行为当中。 代码: #include<iostream> using namespace std; class SubSystem1 { public: string operation1()const { return "SubSystem1,ready!\n"; }原创 2021-10-19 09:42:39 · 74 阅读 · 1 评论 -
设计模式-结构型-装饰模式-c++
本文不讨论装饰模式的具体定义 装饰模式允许将对象放入含有特定行为的装饰类中产生新的行为。 这里的多继承要注意使用行为时,要加入类限定符表明是哪个类的行为。 代码: #include<iostream> using namespace std; class Component { public: virtual ~Component(){} virtual string operation()=0; }; class ConcreteComponent:public Comp原创 2021-10-18 15:12:39 · 103 阅读 · 2 评论 -
设计模式-结构型-组合模式-c++
本文不讨论组合模式的具体定义 侯捷的课程里面提到了一个文件系统的组成,用一个组合模式进行实现: 其实主要是要包含一个父类的数组。 Primitive表示文件,Composit表示目录。 文件不能重写add方法,因为不存在文件里面还有文件的情况。 文件系统的代码: #include<iostream> #include<vector> using namespace std; class Component { public: virtual ~Component(){}原创 2021-10-18 11:37:42 · 45 阅读 · 0 评论 -
设计模式-结构型-桥接模式-c++
本文不讨论桥接模式的具体定义 这里举得例子很恰当。 将两个实现类合并一起同时继承一个类,这样的耦合性比较强,简单来说就是需要将两部分分开来实现,然后将其中一个类内嵌到另一个类当中。 内嵌的方式可以有组合和聚合,即一个不是指针,一个是指针。指针指向的更加灵活。 还记得我们的适配器模式吗,也是内嵌了一个其他类,来改变这个类的相关接口。 这里就分开了形状和颜色类,使得他们通过内嵌的方式来沟通。 代码: #include<iostream> using namespace std; class C原创 2021-10-18 10:22:00 · 70 阅读 · 0 评论 -
设计模式-结构型-适配器模式-c++
本文不讨论适配器模式的具体定义 适配器模式用的还是很多的,首先需要明确需要的类,一个Adapter类用来转化需要适配的Adaptee,当然如果需要将Adapter抽象出来也可以给Adapter一个基类。 其实适配器STL中很多,比如比如容器适配器queue和stack,因为他们的实现底层都是靠deque双端队列来实现的,只是把接口进行了改变。也可以把map和set看作是容器适配器,他们底层都是通过一个Rb_tree来实现的,只是接口变了。 当然还有迭代器适配器和函数适配器,函数适配器最常用的bind绑定参原创 2021-10-15 16:15:02 · 75 阅读 · 0 评论 -
设计模式-创建型-单例模式-c++
本文不讨论单例模式的具体定义 单例模式应该是面试问的最多的一个模式了,手写的概率很大。 Singleton表明程序运行时产生的对象只能是一个,那么只能从类内的构造函数进行考虑。 步骤: 1、将构造函数(默认构造、拷贝构造、赋值构造)放到私有处; 2、类内public声明一个静态的自身对象,当然你可以选择是对象或者是指针,指针的话需要自己手动释放内存,而无指针的对象编译器会在程序结束后帮你释放。(但是别作死把析构函数放到了private中); 3、类外初始化类内的静态成员变量,这里的初始化分两种,一种是饿汉式原创 2021-10-15 11:06:34 · 60 阅读 · 0 评论 -
设计模式-创建型-原型模式-c++
本文不讨论原型模式的具体定义 原型模式也叫克隆模式,就是在使用的时候,直接调用该类的接口即可得到该类的一个拷贝。 存在即合理,那为什么要有原型模式呢,我直接在该类上写出拷贝构造函数和赋值构造函数不行吗? 1、为什么不用new一个对象? 答:因为每次new一个对象的花销是很大的,我们在new 的时候是会调用该类的构造函数的,如果构造函数内部的实现比较复杂,那么new 的时间就会比较长。还有个原因是new对象无法获得运行时的状态。 2、为什么不用拷贝构造函数进行克隆? 答:首先得知道我们想要一个对象的副本的时候原创 2021-10-14 23:06:50 · 101 阅读 · 0 评论 -
设计模式-创建型-建造者模式-c++
本文不讨论建造者模式的具体定义 建造者模式字面意思就是建造东西,为了方便的建造东西而不是多种继承的方式或者在一个类种写多种构造函数。 思路: 1、肯定需要一个建造者类,为了能够更好的指挥建造者,还需要一个指挥者类;当然如果需要的话可以有一个产品类,来放最终指挥者只会建造者建造的产品。 2、这样的话,建造者类可以有抽象基类,继承的子类种可以有一个产品类的指针,每当建造者new的时候,就有一个产品new,然后将建造的每一步零件放入到产品当中。 3、指挥者的作用用来放入需要指挥的建造者,类内有一个建造者指针。原创 2021-10-14 21:52:15 · 62 阅读 · 0 评论 -
设计模式-创建型-抽象工厂模式-c++
本文不讨论抽象工厂模式的具体定义 抽象工厂比工厂方法复杂一点点,思路还是差不多的,就是自己不生产产品,产品都交由工厂生产。 工厂方法就是只生产一个类的产品,即工厂也是一类的工厂,到了抽象工厂就是把工厂再网上抽象一层,即工厂也有很多种。工厂生产的产品是固定的,每一个工厂生产出来的产品又有些许不同。 还是要注意内存的释放,这里是交由Client函数进行释放了。 图片自此 代码: #include<iostream> using namespace std; //椅子的抽象基类 class Abs原创 2021-10-14 16:44:40 · 67 阅读 · 0 评论 -
设计模式-创建型-工厂方法模式-c++
图引用自此原创 2021-10-14 11:17:11 · 65 阅读 · 0 评论