创建型模式-简单工厂方法(simple_factory)

简单工厂方法

简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

实例

main.cc:

#include <windows.h>
#include "simple_factory.h"
/*
design_pattern:"simple factory"
*/
int main(){
    SimpleFactory *simple_factory = new SimpleFactory();
    Watch *apple_watch = simple_factory->CreateWatch(APPLE_TYPE);
    Watch *huawei_watch = simple_factory->CreateWatch(HUAWEI_TYPE);
    apple_watch->ShowInformation();
    huawei_watch->ShowInformation();

    //clear
    delete simple_factory;
    delete apple_watch;
    delete huawei_watch;
    system("Pause");
    return 0;
}

SimpleFactory:

//simple_factory.h
#ifndef HELENDP_SOURCE_SIMPLE_FACTORY_H_
#define HELENDP_SOURCE_SIMPLE_FACTORY_H_
#include "watch.h"

typedef enum{
    APPLE_TYPE = 0,
    HUAWEI_TYPE 
}WatchType;

class SimpleFactory{
public:
    SimpleFactory();
    ~SimpleFactory();
    Watch* CreateWatch(WatchType type);
};
#endif


//simple_factory.cc
#include "simple_factory.h"
#include "huawei_watch.h"
#include "apple_watch.h"
#include <stdio.h>

SimpleFactory::SimpleFactory(){

}

SimpleFactory::~SimpleFactory(){

}

Watch* SimpleFactory::CreateWatch(WatchType type){
    if (APPLE_TYPE == type)
        return new AppleWatch();
    else if (HUAWEI_TYPE == type)
        return new HuaweiWatch();
    else
        return NULL;
}

Watch:

//watch.h
#ifndef HELENDP_SOURCE_WATCH_H_
#define HELENDP_SOURCE_WATCH_H_

class Watch{
public:
    Watch();
    virtual ~Watch();
    virtual void ShowInformation() = 0;
};
#endif


//watch.cc
#include "watch.h"

Watch::Watch(){

}

Watch::~Watch(){

}

AppleWatch:

//apple_watch.h
#ifndef HELENDP_SOURCE_APPLE_WATCH_H_
#define HELENDP_SOURCE_APPLE_WATCH_H_
#include "watch.h"

class AppleWatch : public Watch{
public:
    AppleWatch();
    ~AppleWatch();
    void ShowInformation();
};
#endif


//apple_watch.cc
#include "apple_watch.h"
#include <iostream>
using namespace std;

AppleWatch::AppleWatch(){

}

AppleWatch::~AppleWatch(){

}

void AppleWatch::ShowInformation(){
    cout << "Apple Watch Information!" <<endl;
}

HuaweiWatch:

//huawei_watch.h
#ifndef HELENDP_SOURCE_HUAWEI_WATCH_H_
#define HELENDP_SOURCE_HUAWEI_WATCH_H_
#include "watch.h"

class HuaweiWatch : public Watch{
public:
    HuaweiWatch();
    ~HuaweiWatch();
    void ShowInformation();
};
#endif


//huawei_watch.cc
#include "huawei_watch.h"
#include <iostream>
using namespace std;

HuaweiWatch::HuaweiWatch(){

}

HuaweiWatch::~HuaweiWatch(){

}

void HuaweiWatch::ShowInformation(){
    cout << "Huawei Watch Information" << endl;
}

代码和UML图(EA)工程文件,最后会整理打包上传.

UML类图

这里写图片描述

结构

  • Factory(SimpleFactory):工厂角色
    负责根据参数创建所需的对象.
  • Product(Watch):抽象产品角色
    对所有要创建的产品进行抽象,提供统一的访问接口.
  • ConcreteProduct(AppleWatch,HuaweiWatch):具体产品角色
    所要创建的具体的产品.

优点

  • 工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。
  • 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。
  • 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

缺点

  • 由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
  • 使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。
  • 系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
  • 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值