zoukankan      html  css  js  c++  java
  • 简单工厂(C++)

    image

    Factory:工厂类,负责创建对应的子类(Shape).

    MyShape:图形抽象父类.

    Line:线

    Circle:圆

    Rectangle:矩形

    ShapeType:图形类别枚举

    文件组织

    image

    //MyShape.h
     
    #pragma once
     
    #include <iostream>
    using namespace std;
     
    class MyShape
    {
    public:
        MyShape();
        ~MyShape();
    public:
        virtual void Draw()=0;
    };
     
    //-------------------
    //MyShape.cpp
    #include "MyShape.h"
     
    MyShape::MyShape()
    {
    }
     
    MyShape::~MyShape()
    {
    }
    //==========================
     
    //Line.h
    #pragma once
    #include "myshape.h"
     
    class Line :
        public MyShape
    {
    public:
        Line();
        ~Line();
    public:
        virtual void Draw();
    };
    //---------------
    //LIne.cpp
    #include "Line.h"
     
    Line::Line(void)
    {
    }
     
    Line::~Line(void)
    {
    }
     
    void Line::Draw()
    {
        cout<<"绘制线..."<<endl;
    }
     
    //===========================
    //Circle.h
    #pragma once
    #include "myshape.h"
     
    class Circle :
        public MyShape
    {
    public:
        Circle();
        ~Circle();
    public:
        virtual void Draw();
    };
    //------------------
    //Circle.cpp
    #include "Circle.h"
     
    Circle::Circle(void)
    {
    }
     
    Circle::~Circle(void)
    {
    }
     
    void Circle::Draw()
    {
        cout<<"绘制圆..."<<endl;
    }
     
    //=================================
    //Rectangle.h
    #pragma once
    #include "myshape.h"
     
    class Rectangle :
        public MyShape
    {
    public:
        Rectangle(void);
        ~Rectangle(void);
    public:
        virtual void Draw();
    };
    //------------------------------
    //Rectangle.cpp
    #include "Rectangle.h"
     
    Rectangle::Rectangle(void)
    {
    }
     
    Rectangle::~Rectangle(void)
    {
    }
     
    void Rectangle::Draw()
    {
        cout<<"绘制矩形"<<endl;
    }
     
    //=======================================
    //EShpapeType.h
    enum ShapeType
    {
        //矩形
        ERectangle,
        //圆形
        ECircle,
        //线
        ELine
    };
     
    //Factory.h
    #pragma once
     
    #include "EShapeType.h"
    #include "MyShape.h"
    #include "Line.h"
    #include "Circle.h"
    #include "Rectangle.h"
     
    class FactoryClass
    {
    public:
        static MyShape* CreateShape(ShapeType type);
    };
    //---------------------------------
    //Factory.cpp
    #include "FactoryClass.h"
     
     
    MyShape* FactoryClass::CreateShape( ShapeType type )
    {
        switch(type)
        {
        case ERectangle:
            return new Rectangle();
        case ECircle:
            return new Circle();
        case ELine:
            return new Line();
        }
    }

    //调用测试

    #include <iostream>
    using namespace std;

    #include "FactoryClass.h"

    void Func(MyShape *shape);

    int main()
    {
     cout<<"绘制图形测试开始..."<<endl;
     MyShape *shape = FactoryClass::CreateShape(ELine);
     Func(shape);
     shape = FactoryClass::CreateShape(ECircle);
     Func(shape);
     shape = FactoryClass::CreateShape(ERectangle);
     Func(shape);

     cout<<"Over..."<<endl;
    }

    void Func( MyShape *shape )
    {
     if (shape != NULL)
     {
      shape->Draw();
      delete shape;
      shape = NULL;
     }
    }

    //结果:

    image

  • 相关阅读:
    threading库知识点补充
    数字中 数组排序
    python 多线程 thread (控制主线程跑完,子线程也关闭) 和 (等待子线程跑完,主线程才关闭)
    进程和线程理解
    上下文与 with语句 (如打开文件open的巧妙写法)
    Python中字符串String去除出换行符和空格的问题( , )
    去掉字符空格的方法
    postman 参数化(含文本)
    python之数组元素去重
    sql中limit使用方法
  • 原文地址:https://www.cnblogs.com/sharpfeng/p/1993669.html
Copyright © 2011-2022 走看看