注:图片来源于 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. intellij ide调用一个对象所有的set方法

    1.下载地址:https://github.com/yoke233/genSets/releases/download/1.1/genSets.jar 2.plugin 从本地磁盘安装找到jar,并重 ...

  2. IDEA文件查找功能失效(ctrl+shift+N)

    由于断电.蓝屏引起的强制关机等情况,会导出IDEA文件查找功能失效,Enter file name窗口输入的文字显示红色,无法查出需要的文件.  解决方法: 可以点击File,选择Invalidate ...

  3. (二)OpenCV-Python学习—对比度增强

    ·对于部分图像,会出现整体较暗或较亮的情况,这是由于图片的灰度值范围较小,即对比度低.实际应用中,通过绘制图片的灰度直方图,可以很明显的判断图片的灰度值分布,区分其对比度高低.对于对比度较低的图片,可 ...

  4. Java线程的wait(), notify()和notifyAll()

    Java线程生命周期 类java.lang.Thread包含一个静态的State enum用于定义每种可能的状态. 在任意的时间点, 线程会处于以下的状态之一: NEW – 新创建的线程, 还未启动( ...

  5. 通过sed -i ,通过准备好的sh脚本,来设置linux iptable白名单

    通过准备好的sh脚本,来设置linux iptable白名单 特定字符串的行前插入新行 sed -i '/特定字符串/i 新行字符串' file #!/bin/bash del_stdin_buf() ...

  6. js组件常用封装方法。。。。。【组件封装】 ★★★★★★

    公共弹窗js写法:mcake弹窗封装Dialog.js function Dialog(bg,els,opts) { this.$els = $(els); this.$Dialogbg = $(bg ...

  7. [LeetCode] 628. Maximum Product of Three Numbers 三个数字的最大乘积

    Given an integer array, find three numbers whose product is maximum and output the maximum product. ...

  8. 如何杀死处于进程状态D的进程

    D状态的就是 uninterruptible sleep ,此时进程不能被信号唤醒,GDB等调试工具也不能对它调试,因为GDB也是用到了信号,也杀不死它 D状态的形成 如何分析D状态 cat /pro ...

  9. k8s Pod 扩容和缩容

    在生产环境下,在面临服务需要扩容的场景时,可以使用Deployment/RC的Scale机制来实现.Kubernetes支持对Pod的手动扩容和自动扩容. 手动扩容缩容 通过执行扩容命令,对某个dep ...

  10. 【Python学习之十一】Numpy

    环境 虚拟机:VMware 10  Linux版本:CentOS-6.5-x86_64  客户端:Xshell4 FTP:Xftp4 python3.6 1.介绍NumPy(Numerical Pyt ...