
设计模式
iwonako
这个作者很懒,什么都没留下…
展开
-
抽象工厂
工厂模式以此只能传递一种工厂(虽说可以改接口),若模块中需要多个对象,则需要传递多个工厂,可以把关联的几个工厂抽象合并为一个工厂。 class Gpu { public: virtual void work() = 0; virtual ~Gpu(){} }; class Gpu_Intel :public Gpu { public: virtual void work() { cout << "Gpu_Intel working" <&l.原创 2021-08-17 15:14:07 · 96 阅读 · 0 评论 -
工厂方法
构造对象一般用new,但是new后面必须是确定的类型,后续需求变了可能要改new这段代码,不稳定。工厂方法是将构造对象的类型交给函数使用者决定,不在函数中构造,而是通过接口传递。但也可以直接传递对象啊,为什么还要引入工厂来构造对象? class Object { public: virtual void foo() = 0; virtual ~Object(){} }; class Object_A:public Object { public: virtual void .原创 2021-08-17 01:51:59 · 93 阅读 · 0 评论 -
桥模式
和装饰器模式类似,不同点在于装饰器模式是用于追加功能的,桥模式是从现有的库中调用方法,库是独立于实现化角色的,因此后者不用继承自前者。核心还是传递指针,然后调用方法。 比如从几个不同平台的库中任意调用及组合方法,参考下例 class Implement { public: virtual void func_1() = 0; virtual void func_2() = 0; ~Implement(){} }; class Implement_1 :public Im.原创 2021-08-17 01:22:02 · 140 阅读 · 0 评论 -
装饰器模式
对模块追加功能,比如追加步骤,几行代码,不影响原有功能时使用此模式。 对现有的n个模块追加m种功能,且功能可以按排列组合使用,直接在原有模块上派生会产生很多子类,而且代码重复。 思路:将追加的功能单独抽象成类(装饰器类),并传入原模块指针,这样就能在实现新功能时调用原模块的方法。除此之外,装饰器类还要继承模块类型,继承了之后能够实现追加 功能的复用,原模块的构造器也能用装饰器类初始化;还能重写方法,不用定义新的方法,调用者不用修改代码;声明对象时也能用统一的形式。 下面以扩展component中的f.原创 2021-08-17 00:41:58 · 81 阅读 · 0 评论