[LintCode] Shape Factory 形状工厂

简介:

 Factory is a design pattern in common usage. Implement a ShapeFactory that can generate correct shape.

 You can assume that we have only tree different shapes: Triangle, Square and Rectangle.

 Example

 ShapeFactory sf = new ShapeFactory();

 Shape shape = sf.getShape("Square");

 shape.draw();

 >>  ----

 >> |    |

 >> |    |

 >>  ----

 shape = sf.getShape("Triangle");

 shape.draw();

 >>   /\

 >>  /  \

 >> /____\

 shape = sf.getShape("Rectangle");

 shape.draw();

这道题让我们求形状工厂,实际上就是Factory pattern的一个典型应用,说得是有一个基类Shape,然后派生出矩形,正方形,和三角形类,每个派生类都有一个draw,重写基类中的draw,然后分别画出派生类中的各自的形状,然后在格式工厂类中提供一个派生类的字符串,然后可以新建对应的派生类的实例,没啥难度,就是考察基本的知识。

class Shape {
public:
    virtual void draw() const=0;
};

class Rectangle: public Shape {
public:
    void draw() const {
        cout << " ---- " << endl;
        cout << "|    |" << endl;
        cout << " ---- " << endl;
    }
};

class Square: public Shape {
public:
    void draw() const {
        cout << " ---- " << endl;
        cout << "|    |" << endl;
        cout << "|    |" << endl;
        cout << " ---- " << endl;
    }
};

class Triangle: public Shape {
public:
    void draw() const {
        cout << "  /\\ " << endl;
        cout << " /  \\ " << endl;
        cout << "/____\\ " << endl;
    }
};

class ShapeFactory {
public:
    /**
     * @param shapeType a string
     * @return Get object of type Shape
     */
    Shape* getShape(string& shapeType) {
        if (shapeType == "Square") return new Square();
        else if (shapeType == "Triangle") return new Triangle();
        else if (shapeType == "Rectangle") return new Rectangle();
        else return NULL;
    }
};

本文转自博客园Grandyang的博客,原文链接:形状工厂[LintCode] Shape Factory ,如需转载请自行联系原博主。

相关文章
|
7月前
|
安全 Java 数据库连接
【Java每日一题】——第四十题:设计一个Shape接口和它的两个实现类Square和Circle
【Java每日一题】——第四十题:设计一个Shape接口和它的两个实现类Square和Circle
|
6月前
|
C++
C++类的实例:一个向量类(Vector)
C++类的实例:一个向量类(Vector)
|
7月前
|
安全 Java 数据库连接
【Java每日一题】——第三十六题:设计一个长方形类Rectangle和它的3个子类:圆类Circle、圆球体类Sphere和圆柱体类Cylinder,分别求它们的面积
【Java每日一题】——第三十六题:设计一个长方形类Rectangle和它的3个子类:圆类Circle、圆球体类Sphere和圆柱体类Cylinder,分别求它们的面积
|
7月前
|
测试技术 C++
[C++/PTA] 抽象类Shape
[C++/PTA] 抽象类Shape
100 0
|
7月前
|
JavaScript 测试技术 C++
[C++/PTA] 类的定义和使用
[C++/PTA] 类的定义和使用
133 0
|
7月前
|
存储 C++
[C++/PTA] 立方体类的实现
[C++/PTA] 立方体类的实现
106 0
先创建一个Point类,然后定义Triangle类。在Triangle类中定义三个Point的实体来表示一个三角形的三个顶点
先创建一个Point类,然后定义Triangle类。在Triangle类中定义三个Point的实体来表示一个三角形的三个顶点
242 0
|
Java 测试技术 Android开发
Junit对Triangle( )类(判断三角形)进行测试。
Junit对Triangle( )类(判断三角形)进行测试。
280 0
编写一个抽象类Shape,在此基础上派生出类Rectangle和Circle
编写一个抽象类Shape,在此基础上派生出类Rectangle和Circle
|
前端开发 容器
aspect-ratio与object-fit搭配的妙用
本文将从aspect-ratio与object-fit出发,分别了解两个属性的特性,学习如何结合两个新CSS属性来解决
222 2
aspect-ratio与object-fit搭配的妙用