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

  • 相关阅读:
    172. Factorial Trailing Zeroes
    96. Unique Binary Search Trees
    95. Unique Binary Search Trees II
    91. Decode Ways
    LeetCode 328 奇偶链表
    LeetCode 72 编辑距离
    LeetCode 226 翻转二叉树
    LeetCode 79单词搜索
    LeetCode 198 打家劫舍
    LeetCode 504 七进制数
  • 原文地址:https://www.cnblogs.com/sharpfeng/p/1993669.html
Copyright © 2011-2022 走看看