使用Umbrello学习工厂模式

 工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口, 或者有共同的抽象父类。 当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对 象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了“开放-封闭” 原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模式退化后可以演变成简单工厂模式。

工厂模式实现步骤

1.提供一个抽象工厂类

:所有具体工厂类的父类

2.提供与产品对应的工厂类:负责实例化产品对象

3.提供一个抽象产品类: 所有产品的父类

4.提供一个或多个产品类:工厂方法模式所创建的具体实例对象

 UML图使用Umbrello绘制

简单工程模式UML图

 配置截图

使用Umbrello可直接生存C++代码

生成代码如下:

自编工程模式测试代码

#include <iostream>
#include <string>

using namespace std;

/*---------------------------------------------------------------*/
class Operation
{
    public:
    virtual double getResult(double numberA, double numberB) = 0;
};

/*---------------------------------------------------------------*/
class Add : public Operation
{
    public:
    double getResult(double numberA, double numberB)
    {
        return numberA + numberB;
    }
};

class Sub : public Operation
{
    public:
    double getResult(double numberA, double numberB)
    {
        return numberA - numberB;
    }
};

class Mul : public Operation
{
    public:
    double getResult(double numberA, double numberB)
    {
        return numberA * numberB;
    }
};

/*---------------------------------------------------------------*/
class OperationFactory
{
public:
    OperationFactory();
    ~OperationFactory();
    
    static Operation *createOperation(string operate)
    {
        Operation *oper = nullptr;

        if(operate == "+")
        {
            oper = new Add;
        }
        else if(operate == "-")
        {
            oper = new Sub;
        }
        else
        {
            oper = new Mul;
        }

        return oper;
    }
};


/*---------------------------------------------------------------*/
/*---------------------------------------------------------------*/
class AbstractProduct
{
public:
    virtual void makeProduct() = 0;
};


class AbstractFactory
{
public:
    virtual AbstractProduct* createProduct() = 0;
};


class PlaneProduct :public AbstractProduct
{
public:
    void makeProduct()
    {
        cout << "造飞机....." << endl;
    }
};

class PlaneFactory :public AbstractFactory
{
public:
    AbstractProduct* createProduct()
    {
        AbstractProduct* product = new PlaneProduct;
        return product;
    }
};

class RocketProduct :public AbstractProduct
{
public:
    void makeProduct()
    {
        cout << "造火箭...." << endl;
    }
};

class RocketFactory :public AbstractFactory
{
public :
    AbstractProduct* createProduct()
    {
        AbstractProduct* product = new RocketProduct;
        return product;
    }
};


int main()
{
    Operation *add_oper = OperationFactory::createOperation("+");
    cout << add_oper->getResult(20.5, 30.5) <<endl;

    Operation *sub_oper = OperationFactory::createOperation("-");
    Operation *mul_oper = OperationFactory::createOperation("#");
    cout << sub_oper->getResult(20.5, 30.5) <<endl;
    cout << mul_oper->getResult(20.5, 30.5) <<endl;

    //造飞机
    AbstractFactory* factory = new PlaneFactory;
    AbstractProduct* product = factory->createProduct();
    product->makeProduct();
    //造火箭
    factory = new RocketFactory;
    product = factory->createProduct();
    product->makeProduct();

    return 0;
}

运行结果:

(完)

Umbrello UML Modeller Handbook(PDF手册,英文版),内容摘要:Umbrello UML Modeller helps the software development process by using the industry standard Unified Modelling Language (UML) to enable you to create diagrams for designing and documenting your systems. 目录:1 Introduction 7 2 UML Basics 8 2.1 About UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.2 UML Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2.1 Use Case Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2.1.1 Use Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2.1.2 Actor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2.1.3 Use Case Description . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2.2 Class Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2.2.1 Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.2.1.1 Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.2.1.2 Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.2.1.3 Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.2.2 Class Associations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.2.2.1 Generalization . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2.2.2.2 Associations . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2.2.2.3 Aggregation . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2.2.2.4 Composition . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2.2.3 Other Class Diagram Items . . . . . . . . . . . . . . . . . . . . . . . 13 2.2.2.3.1 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2.2.3.2 Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2.2.3.3 Enums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2.2.3.4 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2.3 Sequence Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2.4 Collaboration Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.2.5 State Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.2.5.1 State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.2.6 Activity Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.2.6.1 Activity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.7 Helper Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.8 Component Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Umbrello UML Modeller Handbook 2.2.9 Deployment Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2.10 Entity Relationship Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2.10.1 Entity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2.10.1.1 Entity Attributes . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2.10.1.2 Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2.11 Extended Entity Relationship (EER) Diagram Concepts . . . . . . . . . . . . 19 2.2.11.1 Specialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2.11.1.1 Disjoint Specialization . . . . . . . . . . . . . . . . . . . . 20 2.2.11.1.2 Overlapping Specialization . . . . . . . . . . . . . . . . . 20 2.2.11.1.3 Category . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3 Working with Umbrello UML Modeller 22 3.1 User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.1.1 Tree View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.1.2 Documentation and Command History Window . . . . . . . . . . . . . . . . 23 3.1.3 Work Area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2 Creating, Loading and Saving Models . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.2.1 New Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.2.2 Save Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.2.3 Load Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.3 Editing Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.4 Adding and Removing Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.4.1 Creating Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.4.2 Removing Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.4.3 Renaming Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.5 Editing Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.5.1 Insert Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.5.2 Deleting Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.5.3 Editing Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.5.4 Editing Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.5.4.1 Class General Settings . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.5.4.2 Class Attribute Settings . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.5.4.3 Class Operations Settings . . . . . . . . . . . . . . . . . . . . . . . . 27 3.5.4.4 Class Template Settings . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.5.4.5 Class Associations Page . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.5.4.6 Class Display Page . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.5.4.7 Class Style Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.5.5 Associations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.5.5.1 Anchor Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.5.6 Notes, Text and Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.5.6.1 Anchors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4 Umbrello UML Modeller Handbook 4 Code Import and Code Generation 30 4.1 Code Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.1.1 Generating Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.1.1.1 Generation Options . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.1.1.1.1 Comment Verbosity . . . . . . . . . . . . . . . . . . . . . . 31 4.1.1.1.2 Folders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.1.1.1.3 Overwrite Policy . . . . . . . . . . . . . . . . . . . . . . . 32 4.1.1.1.4 Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.1.1.2 Generation Wizard Generation . . . . . . . . . . . . . . . . . . . . . 32 4.2 Code Import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5 Other Features 34 5.1 Other Umbrello UML Modeller Features . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.1.1 Copying objects as PNG images . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.1.2 Exporting to an Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.1.3 Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.1.4 Logical Folders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Reference: http://docsbay.net/handbook-umbrello-uml-modeller-handbook
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

issta

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值