工厂模式

工厂模式主要分三种:简单工厂模式、工厂方法模式和抽象工厂模式。
1.简单工厂模式:
1.1一个工厂类;
1.2一个抽象产品类,多个具体子类;
1.3在工厂类中添加逻辑判断,根据条件生成不同的产品;
1.4每添加一种产品,就需要在工厂类中添加相应的逻辑判断和生成代码;
#include<iostream>
using namespace std;


class product_interface
{
    public:
          virtual ~product_interface(){}

    public:
           virtual void do_something()=0;
};

class product_a
:product_interface
{
    public:
           ~product_a(){}
  
    public:
          void do_something()
         {
              cout<<"product_a created"<<endl;
         }
};
class product_b
:product_interface
{
  public:
    ~product_b(){}
  public:
     void do_something()
    {
        cout<<"product_b created"<<endl;
    }
};


class factory
{
  public:
    factory(){}
    ~factory(){}
  public:
    product_interface* create_product(string name_)
   {
      if(name_ == "product_a")
         return (new product_a);
      else if(name == "product_b")
         return (new product_b);
      else
         return NULL;
   }
}




工厂方法模式:
1.一个抽象工厂类,多个具体工厂子类;
2.一个抽象的产品类,多个具体产品子类
3.一个具体工厂类生产一个具体的产品,即工厂与产品一一对应;
4.添加一种产品,原来的工厂类不需要做任何修改,但是需要写一个新的工厂类来生成该产品;如果需要生成的产品比较多,需要创建很多工厂类;
class product
{
   public:
       virtual ~product(){}
   public:
       virtual void do_something() = 0;
};
class product_a
:public product
{
   public:
     ~product_a(){}
   public:
      void do_something()
      {
           cout<<"product_a created!"<<endl;
      }
};
class product_b
:public product
{
   public:
     ~product_b(){}
   public:
      void do_something()
      {
           cout<<"product_b created!"<<endl;
      }
};
class factory
{
   public:
       virtual ~factory(){}
   public:
       virtual product* create_product() = 0;
};
class factory_a
:public factory
{
  public:
     ~factory_a(){}
   public:
       product* create_product()
       {
            product_a* a = new product_a();
            return a;
        }
};
class factory_b
:public factory
{
    public:
        ~factory_b(){}

    public:
        product* create_product()
       {
           product_b* b = new product_b();
           return b;
       }
 
};

int main()
{
      factory_a a_factory_;
      product* pro_a = a_factory_.create_product();
      pro_a->do_something();

      factory_b b_factory_;
      product* pro_b  = b_factory_.create_product();
      pro_b->do_something();

      return 0;
}

总结:简单工厂模式和工厂模式比较起来,工厂模式添加新的产品,不需要改变现有的工厂类,只要写一个新的工厂类就可以了,但是如果产品较多,产生的工厂类会很多,所以在实际应用中,可以采取工厂方法模式和简单工厂模式结合的方式来解决实际问题。
另外,和简单工厂模式比较,工厂方法模式只是把需要创建那个产品的逻辑判断由工厂类中移到了客户应用端。


抽象工厂模式:
1.一个抽象工厂类,多个具体工厂子类;
2.多个抽象的产品类,每个抽象的产品类代表一种产品,每个抽象产品可以派生多个具体的产品类;
3.一个具体的工厂类可以创建多个产品类;
4.每个工厂可以创建一系列的不同产品(抽象类不同),工厂和工厂直接生成的产品类的种类数和类型一一对应,但具体产品不同;
class food
{
   public:
       virtual ~food(){}
   public:
       virtual void food_do_something() = 0;
};

class meat
:public food
{
    public:
      ~meat(){}
     public:
        void food_do_something()
        {
             cout<<"meat created!"<<endl;
        }
};

class rice
:public food
{
    public:
        ~rice(){}
    public:
        void food_do_something()
        {
             cout<<"rice created!"<<endl;
        }
};

class fruit
{
     public:
         virtual ~fruit(){}
     public:
         virtual void fruit_do_something() = 0;
};

class apple
:public fruit
{
   public:
       ~apple(){}
   public:
        void fruit_do_something()
        {
             cout<<"apple created!"<<endl;
        }
};

class orange
:public fruit
{
     public:
         ~orange(){}
     public:
         void fruit_do_something()
         {
               cout<<"orange created!"<<endl;
         }
};

class human
{
   public:
      virtual ~human(){}

   public:
      virtual food*  get_food() = 0;
      virtual fruit*   get_fruit() = 0;
};

class human_a
:public human
{
   public:
       ~human_a(){}
   public:
       food* get_food()
       {
            return (new meat());
       }

       fruit*  get_fruit()
       {
           return (new apple());
        }
};

class human_b
:public human
{
   public:
     ~human_b(){}
   public:
      food* get_food()
      {
          return (new rice());
      }

      fruit* get_fruit()
     {
         return (new orange());
     }
};


int main()
{
     human* man = new human_a();
     man->get_food()->food_do_something();
     man->get_fruit()->fruit_do_something();

     human* man_1 = new human_b();     
     man_1->get_food()->food_do_something();
     man_2->get_fruit()->fruit_do_something();


      return 0;
}



总结:抽象工厂模式和工厂模式比较,抽象工厂的一个工厂类可以生成不同类型的一系列产品,而工厂方法模式一个工厂类只能生成一种产品,
因此抽象工厂适用于需要生成多个产品系的系统。

内容概要:文章详细介绍了ETL工程师这一职业,解释了ETL(Extract-Transform-Load)的概念及其在数据处理中的重要性。ETL工程师负责将分散、不统一的数据整合为有价值的信息,支持企业的决策分析。日常工作包括数据整合、存储管理、挖掘设计支持和多维分析展现。文中强调了ETL工程师所需的核心技能,如数据库知识、ETL工具使用、编程能力、业务理解能力和问题解决能力。此外,还盘点了常见的ETL工具,包括开源工具如Kettle、XXL-JOB、Oozie、Azkaban和海豚调度,以及企业级工具如TASKCTL和Moia Comtrol。最后,文章探讨了ETL工程师的职业发展路径,从初级到高级的技术晋升,以及向大数据工程师或数据产品经理的横向发展,并提供了学习资源和求职技巧。 适合人群:对数据处理感兴趣,尤其是希望从事数据工程领域的人士,如数据分析师、数据科学家、软件工程师等。 使用场景及目标:①了解ETL工程师的职责和技能要求;②选择适合自己的ETL工具;③规划ETL工程师的职业发展路径;④获取相关的学习资源和求职建议。 其他说明:随着大数据技术的发展和企业数字化转型的加速,ETL工程师的需求不断增加,尤其是在金融、零售、制造、人工智能、物联网和区块链等领域。数据隐私保护法规的完善也使得ETL工程师在数据安全和合规处理方面的作用更加重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值