做了一个工厂方法的例子 [英] Made an exmaple of Factory Method

查看:74
本文介绍了做了一个工厂方法的例子的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

// Factory Method && RAII

#pragma warning(disable:4996)

#include <iostream>
#include <memory>
using namespace std;

struct IClock
{
    virtual ~IClock() {}
};

class AtomicClock : public IClock
{
public:
    AtomicClock() { cout << "AtomicClock()" << endl; }
    ~AtomicClock() { cout << "~AtomicClock()" << endl; }
private:
};
class WaterClock : public IClock
{
public:
    WaterClock() { cout << "WaterClock()" << endl; }
    ~WaterClock() { cout << "~WaterClock()" << endl; }
private:
};
class WristClock : public IClock
{
public:
    WristClock() { cout << "WristClock()" << endl; }
    ~WristClock() { cout << "~WristClock()" << endl; }
private:
};

//--------------------------------------------------

struct IClockFactory
{
    virtual IClock* createClock() = 0;
    virtual ~IClockFactory() {};
};

class AtomicFactory : public IClockFactory
{
public:
    virtual IClock* createClock() { return new AtomicClock; }

};
class WaterFactory : public IClockFactory
{
public:
    virtual IClock* createClock() { return new WaterClock; }
};
class WristFactory : public IClockFactory
{
public:
    virtual IClock* createClock() { return new WristClock; }
};

int main(int argc, char* argv[])
{
    //사용자 입력
    argv[1] = ( char* )malloc(sizeof( char )* 10);
    strcpy(argv[1], "Atomic");

    IClockFactory* p;
    if (strcmp(argv[1], "Atomic"))
        p = new AtomicFactory;
    else if (strcmp(argv[1], "Water"))
        p = new WaterFactory;
    else if (strcmp(argv[1], "Wrist"))
        p = new WristFactory;
    else
        return 0;

    unique_ptr<IClock> pClock(p->createClock());
}





我做了一个示例c ++代码,用于理解工厂方法。

我想要检查我做的是否正确。



我会接受任何意见。



谢谢



I made an example c++ code for understanding factory method.
I want to check if what I did is right.

I'll take any opinions.

Thank you

推荐答案

整洁简单。

供参考 - 浏览工厂方法模式 [ ^ ]。


这篇关于做了一个工厂方法的例子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆