互联网网站样式,福建设计招聘网站,网站服务器时间在哪里查询,做设计找图有哪些网站有哪些问题本文章属于专栏《设计模式#xff08;极简c版#xff09;》 继续上一篇《设计原则》。本章简要说明工厂模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。
模式说明#xff1a; 简单工厂模式 方案#xff1a;对象不直接new#xff0c;而是通过另一个类极简c版》 继续上一篇《设计原则》。本章简要说明工厂模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。
模式说明 简单工厂模式 方案对象不直接new而是通过另一个类工厂的接口生产优点保证了创建行为的一致降低维护成本缺点所有对象在一个类中创建修改影响面太大工厂方法模式 方案每个类有独立的工厂类优点修改影响小缺点工厂类太多维护成本高抽象工厂模式 方案类似的工厂继承一个Base工厂优点降低了工厂类的数量本质是把有相同语义和行为的逻辑放到Base工厂中方便管理缺点对开发人员的业务理解要求高本质思想把类似的创建逻辑的封装在一个接口里、把有接口中类似的创建逻辑再封装到更基础的接口或类中以此类推。实践建议一个工厂生产所有类当类变多时。增加工厂每个工厂放有共性的类。当工厂太多时把有共同行为的工厂逻辑放到一个Base工厂中。每个阶段只有到一定的量才有类似可言不要一开始盲目地封装那会增加系统的复杂度并降低可读性。 抽象工厂类代码示例
#include iostream
#include memory// 抽象产品 Bird
class Bird {
public:virtual void sound() 0;virtual ~Bird() {} // 虚析构函数
};// 具体产品 Sparrow
class Sparrow : public Bird {
public:void sound() override {std::cout Chirp chirp! std::endl;}
};// 具体产品 Penguin
class Penguin : public Bird {
public:void sound() override {std::cout Squawk squawk! std::endl;}
};// 抽象工厂 BirdFactory
class BirdFactory {
public:virtual std::unique_ptrBird createBird() 0;virtual ~BirdFactory() {} // 虚析构函数
};// 具体工厂 SparrowFactory
class SparrowFactory : public BirdFactory {
public:std::unique_ptrBird createBird() override {return std::unique_ptrBird(new Sparrow());}
};// 具体工厂 PenguinFactory
class PenguinFactory : public BirdFactory {
public:std::unique_ptrBird createBird() override {return std::unique_ptrBird(new Penguin());}
};int main() {// 使用 SparrowFactory 创建 Sparrow 实例std::unique_ptrBirdFactory sparrowFactory(new SparrowFactory());std::unique_ptrBird sparrow sparrowFactory-createBird();sparrow-sound(); // 输出Chirp chirp!// 使用 PenguinFactory 创建 Penguin 实例std::unique_ptrBirdFactory penguinFactory(new PenguinFactory());std::unique_ptrBird penguin penguinFactory-createBird();penguin-sound(); // 输出Squawk squawk!return 0;
}