zoukankan      html  css  js  c++  java
  • 设计模式之工厂模式(Factory Pattern)用C++实现

    工厂模式(Factory Pattern):这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。它定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

    主要解决:主要解决接口选择的问题。

    何时使用:我们明确地计划不同条件下创建不同实例时。

    如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。

    注意事项:作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。

    代码

    //工厂模式:
    #include "stdafx.h"
    #include <iostream>
    #include "cstring"
    using namespace std;
    
    class Shape
    {
    public:
    	virtual void draw()=0;
    };
    //------------------------------------------------------
    class Rect : public Shape
    {
    public:
    	void draw()
    	{
    		cout << "Rec.draw()" << endl;
    	}
    };
    class Circle : public Shape
    {
    public:
    	void draw()
    	{
    		cout << "Circle.draw()" << endl;
    	}
    };
    class Square : public Shape
    {
    public:
    	void draw()
    	{
    		cout << "Square.draw()" << endl;
    	}
    };
    //------------------------------------------------------
    class ShapeFactory
    {
    public:
    	Shape* getShape(string shape)
    	{
    		if (shape.empty())
    		{
    			return NULL;
    		}
    		if (shape.compare("Rec")==0)
    		{
    			return new Rect();
    		}else if (shape.compare("Circle")==0)
    		{
    			return new Circle();
    		}else if (shape.compare("Square")==0)
    		{
    			return new Square();
    		}
    		return NULL;
    	}
    };
    //------------------------------------------------------
    int _tmain(int argc, _TCHAR* argv[])
    {
    	ShapeFactory shapefactory;
    	Shape* shape1 = shapefactory.getShape("Circle");
    	shape1->draw();
    
    	Shape* shape2 = shapefactory.getShape("Rec");
    	shape2->draw();
    
    	Shape* shape3 = shapefactory.getShape("Square");
    	shape3->draw();
    	system("pause");
    	return 0;
    }


    生命不止,奋斗不息!
  • 相关阅读:
    正式班D25
    解决oracle用户锁定
    python学习第17天
    python学习第16天
    python学习第15天
    python学习第十四天
    python学习第13天
    Python基础
    python学习第12天
    python学习第11天
  • 原文地址:https://www.cnblogs.com/huzongzhe/p/6735202.html
Copyright © 2011-2022 走看看