注:图片来源于 https://www.cnblogs.com/-saligia-/p/10216752.html

工厂UML图解析:

工厂模式:client用户需要三步:

1.创建工厂;

2.生产产品对象;

3.使用对象方法。

代码:

工厂类 Factory.h

//
// Created by Halo on 2019/10/14.
// #ifndef FACTORY_FACTORY_H
#define FACTORY_FACTORY_H #include "Product.h" //抽象手机工厂类
class Factory {
public:
//生产手机
virtual Phone* CreatePhone() = ; }; //OPPO手机工厂
class OPPOFactory : public Factory {
public:
//OPPO手机工厂类 use a OPPO手机类
Phone* CreatePhone() override {
return new OPPO();
}
}; //VIVO手机工厂
class VIVOFactory : public Factory {
public:
Phone* CreatePhone() override {
return new VIVO();
}
}; //HUAWEI手机工厂
class HUAWEIFactory : public Factory {
public:
Phone* CreatePhone() override {
return new HUAWEI();
}
}; //XIAOMI手机工厂
class XIAOMIFactory : public Factory {
public:
Phone* CreatePhone() override {
return new XIAOMI();
}
}; #endif //FACTORY_FACTORY_H

产品类 Product.h

//
// Created by Halo on 2019/10/14.
// #ifndef FACTORY_PRODUCT_H
#define FACTORY_PRODUCT_H #include <string> //抽象手机类
class Phone {
public:
//Phone() = default;;
//得到手机名称
virtual std::string Say() = ;
//~Phone() = default;
}; //具体手机类:OPPO
class OPPO : public Phone {
public:
//OPPO() = default;
std::string Say() override {
return "OPPO 音乐手机!";
}
//~OPPO() = default;
};
//具体手机类:VIVO
class VIVO : public Phone {
public:
//VIVO() = default;
std::string Say() override {
return "VIVO 照相手机!";
}
//~VIVO() = default;
};
//具体手机类:HUAWEI
class HUAWEI : public Phone {
public:
//HUAWEI() = default;
std::string Say() override {
return "HUAWEI 商务手机!";
}
//~HUAWEI() = default;
};
//具体手机类:XIAOMI
class XIAOMI : public Phone {
public:
//XIAOMI() = default;
std::string Say() override {
return "XIAOMI 性价比手机!";
}
//~XIAOMI() = default;
}; #endif //FACTORY_PRODUCT_H

用户 main.cpp

#include <iostream>
#include "Factory.h"
using namespace std; int main() {
//创建OPPO手机工厂
Factory* f1 = new OPPOFactory();
//OPPO手机工厂制造手机
Phone* p1 = f1->CreatePhone();
//OPPO手机口号
cout << p1->Say() << endl; Factory* f2 = new VIVOFactory();
Phone* p2 = f2->CreatePhone();
cout << p2->Say() << endl; Factory* f3 = new HUAWEIFactory();
Phone* p3 = f3->CreatePhone();
cout << p3->Say() << endl; Factory* f4 = new XIAOMIFactory();
Phone* p4 = f4->CreatePhone();
cout << p4->Say() << endl; return ;
}

1.工厂模式(Factory Method)的更多相关文章

  1. c++工厂模式(Factory method)

    下面以女娲造黑人,白人,黄种人的例子来介绍一下工厂模式. 1.工厂的接口,相当于造人工厂总部. class IHumanFactory { public: IHumanFactory(void) { ...

  2. 设计模式——工厂模式(Factory Method)

    工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪个类.工厂方法使一个类的实例化延迟到其子类. UML图: 运算基类: package com.cnblog.clarck; /** * 数据 ...

  3. 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)

    原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...

  4. 【设计模式】工厂方法模式 Factory Method Pattern

    在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...

  5. 工厂方法模式-Factory Method(Java实现)

    工厂方法模式-Factory Method 工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法让实例化的具体内容交给子类工厂来进行. 本文中的例子是这样的. 生产一个身份证, ...

  6. 二十四种设计模式:工厂方法模式(Factory Method Pattern)

    工厂方法模式(Factory Method Pattern) 介绍定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类. 示例有SqlMes ...

  7. 设计模式-03工厂方法模式(Factory Method Pattern)

    插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背 ...

  8. 六个创建模式之工厂方法模式(Factory Method Pattern)

    问题: 在使用简单工厂模式的时候,如果添加新的产品类,则必需修改工厂类,违反了开闭原则. 定义: 定义一个用于创建对象的接口,让子类决定具体实例化哪个产品类.此时工厂和产品都具有相同的继承结构,抽象产 ...

  9. 工厂模式(Factory Patter)

    1.工厂模式简介 工厂模式属于创建型模式,是专门用来创建对象的模式,抽象了实例化的过程.工厂模式分为 : 工厂方法模式.抽象工厂模式. 在学习工厂方法模式.抽象工厂之前,首先先要了解一下简单工厂模式, ...

  10. Spring 通过工厂方法(Factory Method)来配置bean

    Spring 通过工厂方法(Factory Method)来配置bean 在Spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean. ...

随机推荐

  1. vue 中使用阿里iconfont彩色图标

    在main.js中 import './assets/images/iconfont/iconfont.css'import './assets/images/iconfont/iconfont.js ...

  2. Unity3D小知识

    下载离线Unity3D官方文档 Unity同时打开多个场景(Multi-Scene editing) Unity将资源导出成package实现资源重用 Animator不一定只能用来做动画,也可以当状 ...

  3. jquery数组倒序

    倒叙前:var mem = [1, 2, 3]: 倒序后:var men1=[3,2,1]: <script type="text/javascript"> $(fun ...

  4. java中JSON转含泛型对象

    public static void main(String[] args) { UserDto userDto=new UserDto("test","14" ...

  5. 进程、线程、IP、端口间关系

    进程.线程.IP.端口间关系 进程是指在系统中正在运行的一个应用程序: 线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元. 对于操作系统而言,其调度单元是线程.一个进程至少包括 ...

  6. Centos7安装PHP、安装MySQL、安装apache

    Centos7安装PHP.MySQL.apache 这里今天教大家如何在centos7安装PHP,apache,mysql. 首先我们需要先安装centos7,我们可以在我们的电脑上安装一个虚拟机,在 ...

  7. 微信小程序开发——微信小程序下拉刷新真机无法弹回

    开发工具中下拉之后页面回弹有一定的延迟,这个时间也有点久.真机测试,下拉后连回弹都没有,这个问题要解决,就得在下拉函数里加上停止下拉刷新的API,如下: /** * 下拉刷新 */ onPullDow ...

  8. ROS tf监听编写

    博客转载自:https://www.ncnynl.com/archives/201702/1311.html ROS与C++入门教程-tf-编写tf listener(监听) 说明: 介绍如何使用tf ...

  9. 手工下载php的composer软件包,如何让项目自动加载包里的类

    有的时候需要手工下载php的composer包 1.将下载好的包放到项目的vendor目录下,比如包名:pinguo/php-aop 2.然后查看软件包目录(vendor/pinguo/php-aop ...

  10. [LeetCode] 282. Expression Add Operators 表达式增加操作符

    Given a string that contains only digits 0-9 and a target value, return all possibilities to add bin ...