1.工厂模式(Factory Method)
注:图片来源于 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)的更多相关文章
- c++工厂模式(Factory method)
下面以女娲造黑人,白人,黄种人的例子来介绍一下工厂模式. 1.工厂的接口,相当于造人工厂总部. class IHumanFactory { public: IHumanFactory(void) { ...
- 设计模式——工厂模式(Factory Method)
工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪个类.工厂方法使一个类的实例化延迟到其子类. UML图: 运算基类: package com.cnblog.clarck; /** * 数据 ...
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...
- 【设计模式】工厂方法模式 Factory Method Pattern
在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...
- 工厂方法模式-Factory Method(Java实现)
工厂方法模式-Factory Method 工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法让实例化的具体内容交给子类工厂来进行. 本文中的例子是这样的. 生产一个身份证, ...
- 二十四种设计模式:工厂方法模式(Factory Method Pattern)
工厂方法模式(Factory Method Pattern) 介绍定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类. 示例有SqlMes ...
- 设计模式-03工厂方法模式(Factory Method Pattern)
插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背 ...
- 六个创建模式之工厂方法模式(Factory Method Pattern)
问题: 在使用简单工厂模式的时候,如果添加新的产品类,则必需修改工厂类,违反了开闭原则. 定义: 定义一个用于创建对象的接口,让子类决定具体实例化哪个产品类.此时工厂和产品都具有相同的继承结构,抽象产 ...
- 工厂模式(Factory Patter)
1.工厂模式简介 工厂模式属于创建型模式,是专门用来创建对象的模式,抽象了实例化的过程.工厂模式分为 : 工厂方法模式.抽象工厂模式. 在学习工厂方法模式.抽象工厂之前,首先先要了解一下简单工厂模式, ...
- Spring 通过工厂方法(Factory Method)来配置bean
Spring 通过工厂方法(Factory Method)来配置bean 在Spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean. ...
随机推荐
- intellij ide调用一个对象所有的set方法
1.下载地址:https://github.com/yoke233/genSets/releases/download/1.1/genSets.jar 2.plugin 从本地磁盘安装找到jar,并重 ...
- IDEA文件查找功能失效(ctrl+shift+N)
由于断电.蓝屏引起的强制关机等情况,会导出IDEA文件查找功能失效,Enter file name窗口输入的文字显示红色,无法查出需要的文件. 解决方法: 可以点击File,选择Invalidate ...
- (二)OpenCV-Python学习—对比度增强
·对于部分图像,会出现整体较暗或较亮的情况,这是由于图片的灰度值范围较小,即对比度低.实际应用中,通过绘制图片的灰度直方图,可以很明显的判断图片的灰度值分布,区分其对比度高低.对于对比度较低的图片,可 ...
- Java线程的wait(), notify()和notifyAll()
Java线程生命周期 类java.lang.Thread包含一个静态的State enum用于定义每种可能的状态. 在任意的时间点, 线程会处于以下的状态之一: NEW – 新创建的线程, 还未启动( ...
- 通过sed -i ,通过准备好的sh脚本,来设置linux iptable白名单
通过准备好的sh脚本,来设置linux iptable白名单 特定字符串的行前插入新行 sed -i '/特定字符串/i 新行字符串' file #!/bin/bash del_stdin_buf() ...
- js组件常用封装方法。。。。。【组件封装】 ★★★★★★
公共弹窗js写法:mcake弹窗封装Dialog.js function Dialog(bg,els,opts) { this.$els = $(els); this.$Dialogbg = $(bg ...
- [LeetCode] 628. Maximum Product of Three Numbers 三个数字的最大乘积
Given an integer array, find three numbers whose product is maximum and output the maximum product. ...
- 如何杀死处于进程状态D的进程
D状态的就是 uninterruptible sleep ,此时进程不能被信号唤醒,GDB等调试工具也不能对它调试,因为GDB也是用到了信号,也杀不死它 D状态的形成 如何分析D状态 cat /pro ...
- k8s Pod 扩容和缩容
在生产环境下,在面临服务需要扩容的场景时,可以使用Deployment/RC的Scale机制来实现.Kubernetes支持对Pod的手动扩容和自动扩容. 手动扩容缩容 通过执行扩容命令,对某个dep ...
- 【Python学习之十一】Numpy
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 1.介绍NumPy(Numerical Pyt ...