您的位置:首页 > 科技 > IT业 > seo主要做哪些工作_郑州百度推广开户_互联网精准营销_推广app拿返佣的平台

seo主要做哪些工作_郑州百度推广开户_互联网精准营销_推广app拿返佣的平台

2025/6/29 16:16:45 来源:https://blog.csdn.net/menger3388/article/details/142855694  浏览:    关键词:seo主要做哪些工作_郑州百度推广开户_互联网精准营销_推广app拿返佣的平台
seo主要做哪些工作_郑州百度推广开户_互联网精准营销_推广app拿返佣的平台

工厂模式

        定义:工厂模式是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建对象的方法。主要目标是将对象的创建与使用分离,以提高代码的可扩展性和可维护性。

        优点:代码解耦、隐藏创建细节、更易于扩展、避免使用大量条件判断。

        缺点:增加了系统的复杂度、增加了代码量、在某些情况下可能不利于扩展,且不适用于所有场景。

简单工厂模式

        定义:简单工厂模式是工厂模式中最简单的一种,它通过一个工厂类来创建对象,而不需要客户端知道具体的产品类。

        优点:隐藏了对象创建的细节,将产品的实例化推迟到子类中实现;客户端基本不用关心使用的是哪个产品,只需要知道用哪个工厂;方便添加新的产品子类。

        缺点:要求产品子类的类型差不多,使用的方法名都相同;每添加一个产品子类,都必须在工厂类中添加一个判断分支,这违背了开放-封闭原则。

抽象工厂模式

        定义:抽象工厂模式是一种高级的设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

        优点:灵活性高、可维护性好、可靠性高。

        缺点:当产品类数据较多时,需要实现大量的工厂类,增加了代码量。

代码:

        注:为什么使用智能指针(std::shared_ptr)?由于工厂模式下,指针的创建者和使用者大概率不是同一用户,使用智能指针能够避免使用者由于疏忽没有释放指针造成的内存泄露。

//工厂模式
class Product
{
public:virtual void Test() = 0;
};class ProductA : public Product
{
public:void Test(){cout<< "ProductA Test"<<endl;}
};class ProductB : public Product
{
public:void Test(){cout<< "ProductA Test"<<endl;}
};class Factory
{
public:virtual std::shared_ptr<Product> CreateProduct() = 0;
};class FactoryA : public Factory
{
public:std::shared_ptr<Product> CreateProduct(){return std::make_shared<ProductA>();}
};class FactoryB : public Factory
{
public:std::shared_ptr<Product> CreateProduct(){return std::make_shared<ProductB>();}
};int main(int argc , char *argv [])
{Factory *factoryA = new FactoryA ();auto productA = factoryA->CreateProduct();productA->Test();Factory *factoryB = new FactoryB ();auto productB = factoryB->CreateProduct();productB->Test();delete factoryA;delete factoryB;return 0;
}
//工厂模式
enum ProductType
{TypeA = 0,TypeB,TypeC
};class Product
{
public:virtual void Test() = 0;
};class ProductA : public Product
{
public:void Test(){cout << "ProductA Test" << endl;}
};class ProductB : public Product
{
public:void Test(){cout << "ProductB Test" << endl;}
};class ProductC : public Product
{
public:void Test(){cout << "ProducC Test" << endl;}
};class Factory
{
public:std::shared_ptr<Product> CreateProduct(ProductTypetype){switch (type){case TypeA:return std::make_shared<ProductA>();case TypeB:return std::make_shared<ProductB>();case TypeC:return std::make_shared<ProductC>();default:return NULL;}}
};int main(int argc, char *argv[])
{Factory *ProductFactory = new Factory();auto productObjA = ProductFactory->CreateProduct(TypeA);if(productObjA.get())productObjA->Test();auto productObjB = ProductFactory->CreateProduct(TypeB);if(productObjB.get())productObjB->Test();auto productObjC = ProductFactory->CreateProduct(TypeC);if(productObjC.get())productObjC->Test();delete ProductFactory;return 0;
}
//抽象工厂模式
class ProductA
{
public:virtual void Test() = 0;
};class ProductA1 : public ProductA
{
public:void Test(){cout<<"ProductA1  Test"<<endl;}
};class ProductA2 : public ProductA
{
public:void Test(){cout<<"ProductA2  Test"<<endl;}
};class ProductB
{
public:virtual void Test() = 0;
};class ProductB1 : public ProductB
{
public:void Test(){cout<<"ProductB1  Test"<<endl;}
};class ProductB2 : public ProductB
{
public:void Test(){cout<<"ProductB2  Test"<<endl;}
};class Factory
{
public:virtual std::shared_ptr<ProductA> CreateProductA() = 0;virtual std::shared_ptr<ProductB> CreateProductB() = 0;
};class Factory1 : public Factory
{
public:std::shared_ptr<ProductA> CreateProductA(){return std::make_shared<ProductA1>();}std::shared_ptr<ProductB> CreateProductB(){return std::make_shared<ProductB1>();}
};class Factory2 : public Factory
{std::shared_ptr<ProductA> CreateProductA(){return std::make_shared<ProductA2>();}std::shared_ptr<ProductB> CreateProductB(){return std::make_shared<ProductB2>();}
};int main(int argc, char *argv[])
{Factory *factoryObj1 = new Factory1();auto productObjA1 = factoryObj1->CreateProductA();auto productObjB1 = factoryObj1->CreateProductB();if(productObjA1.get())productObjA1->Test();if(productObjB1.get())productObjB1->Test();Factory *factoryObj2 = new Factory2();auto productObjA2 = factoryObj2->CreateProductA();auto productObjB2 = factoryObj2->CreateProductB();if(productObjA2.get())productObjA2->Test();if(productObjB2.get())productObjB2->Test();return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com