![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
swy_swy_swy
这个作者很懒,什么都没留下…
展开
-
设计模式【十三】:责任链模式
责任链模式原创 2022-07-15 23:25:20 · 261 阅读 · 0 评论 -
设计模式【十二】:代理模式
访问对象时提供重定向。 处于某种考虑,不希望客户端直接访问对象时,可采用代理模式。 不改变被代理对象的代码。 何时使用 需要相对于简单指针来说更加强壮的对于对象的引用 实现时技巧 由于是对于对象的引用,在c++中可以通过代理模式重载->运算符。 代理可以知晓其代理对象的类别。不过这种情况可能不完全符合代理模式的目的,见辨析。 辨析:代理or装饰器? 我们注意到,如果将代理模式的被代理对象由客户端设置,那么代码的形式非常接近于装饰器模式。鄙人认为,代理模式与装饰器模式有如下区别:...原创 2022-07-12 01:04:12 · 188 阅读 · 0 评论 -
设计模式【十一】:享元模式
享元模式简介原创 2022-07-10 00:27:44 · 108 阅读 · 0 评论 -
设计模式【十】:外观模式
设计模式之外观模式(facade)原创 2022-07-06 05:54:14 · 91 阅读 · 0 评论 -
设计模式【九】:装饰器
设计模式之装饰器原创 2022-07-02 22:37:46 · 100 阅读 · 0 评论 -
设计模式【八】:组合模式
组合模式原创 2022-06-30 21:13:08 · 112 阅读 · 0 评论 -
设计模式【七】:桥接
桥接模式原创 2022-06-27 21:19:18 · 86 阅读 · 0 评论 -
设计模式【六】:适配器
类适配器 适配器可override被适配者的方法。 只引入一个额外对象,且没有指针重定向。 对象适配器 一个适配器可以适配多个被适配者(多维护几个指针即可)。 缺点 类适配器 类适配是实体类。这限制了可扩展性。 对象适配器 由于通过指针适配,需要考虑被适配者的子类。严格来说这不算缺点,这是个特点。 何时使用 有时一些类(一般是工具类)的方法仅仅因为签名不符就不能用了。此时可以使用适配器套壳。...原创 2022-06-23 20:13:15 · 171 阅读 · 0 评论 -
设计模式【五】:单例模式
控制对单一实例的访问。 减少命名空间的使用。单例模式可以视为对于全局变量的替代。 允许对对象的细化。单例可以被继承,只需修改方法即可细化其单例。 允许控制实例的数量。可以在单例类内添加计数器或修改方法,控制实例的数量。典型的单例模式可以视为实例数量为1的特殊情况。 何时使用 某些类需要被确保只有一个实例,这些类一般是系统的核心,比如某某manager。...原创 2022-06-21 21:00:32 · 118 阅读 · 0 评论 -
设计模式【四】:原型
优缺点 运行时增删产品对象。 动态地获得具体的对象,通过赋值即可,而非对每种对象都要继承一个子类然后实例化。一个对象的拷贝和一个对象的初始化过程相似,但不需要一个子类继承,也就是说更简单。 减少继承。如果采用抽象工厂,相较于原型模式,其继承链一般更长。 缺点 原型类的每一个子类都必须实现Clone()方法。有时我们需要批量生产产品。这些产品只有细微差别,比如毕业证书。我们不必创建张三证书以及李四证书来继承证书类,我们只需生产证书的原型,比如张三证书,然后将名字修改为李四即可。...原创 2022-06-18 22:27:38 · 90 阅读 · 0 评论 -
设计模式【三】:工厂方法
设计模式:工厂方法 实现时技巧以及优缺点原创 2022-06-17 08:41:14 · 88 阅读 · 0 评论 -
设计模式【二】:构造器
设计模式【二】:构造器 伪代码 //定义一个自定义集合的构造器 class setBuilder{ public: virtual void buildSet(){} virtual void buildA(int a){} virtual void buildB(int b){} virtual mySet* getSet(){return 0;} protected: setBuilder(); }; //定义使用构造器的方法 mySet* createMySet(setBuilder&原创 2022-05-28 21:22:38 · 126 阅读 · 0 评论 -
设计模式【一】:抽象工厂
设计模式【一】:抽象工厂 伪代码 //定义抽象工厂 class abstractFactory{ createSet(){} createProductA(){}; createProductB(){}; }; //定义调用者 productSet* makeProducts(abstractFactory& factory){ set = factory->createSet(); set.a = factory->createProductA(); set.b = fa原创 2022-05-21 23:20:36 · 339 阅读 · 0 评论