AbstractFactory抽象工厂模式
#include <iostream>
using namespace std;
class ProductAbase
{
public:
ProductAbase(){}
virtual ~ProductAbase(){}
virtual void Printf() = 0;
};
class Product1 : public ProductAbase
{
public:
void Printf()
{
cout << "Product1::Printf()" << endl;
}
};
class Product2 :public ProductAbase
{
public:
void Printf()
{
cout << "Product2::Printf()" << endl;
}
};
class ProductBbase
{
public:
virtual void Printf() = 0;
};
class Product3 : public ProductBbase
{
public:
void Printf()
{
cout << "Product3::Printf()" << endl;
}
};
class Product4 : public ProductBbase
{
public:
void Printf()
{
cout << "Product4::Printf()" << endl;
}
};
//工厂类。
class Factory
{
public:
Factory(){}
virtual ~Factory(){}
virtual ProductAbase* GetProductA() = 0;
virtual ProductBbase* GetProductB() = 0;
};
class Factory1 : public Factory
{
public:
ProductAbase* GetProductA()
{
return new Product1();
}
ProductBbase* GetProductB()
{
return new Product3();
}
};
class Factory2 : public Factory
{
public:
ProductAbase* GetProductA()
{
return new Product2();
}
ProductBbase* GetProductB()
{
return new Product4();
}
};
int main()
{
Factory *fa = new Factory1();
ProductAbase *pa = fa->GetProductA();//获得ProdcutAbase的子类对象Product1。
pa->Printf();//Product1的操作方法。
ProductBbase *pb = fa->GetProductB();//获得ProductBbase的子类对象Product3。
pb->Printf();//Product3的操作方法。
fa = new Factory2();
pa = fa->GetProductA();
pa->Printf();//Product2的操作方法。
pb = fa->GetProductB();
pb->Printf();//Product3的操作方法。
return 0;
}
//总结:抽象工厂模式无非是将单个工厂模式聚合起来,统一的用工厂函数对对象的实例化延迟。
//然后统一的对对象的构造进行管理。说的简单点就是,我将宝马停在1号车间。奔驰停在2号车间,
//奥迪停在3号车间,我须要什么车我就开几号车间门,工厂函数就是起这样一个作用,将对象的
//实例化用统一的函数进行封装。
AbstractFactory抽象工厂模式的更多相关文章
- 桥接模式及C++实现 C++设计模式-AbstractFactory抽象工厂模式
桥接模式及C++实现 桥接模式 先说说桥接模式的定义:将抽象化(Abstraction)与实现化(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式之一 ...
- AbstractFactory(抽象工厂模式)
AbstractFactory(抽象工厂模式) 有些情况下我们需要根据不同的选择逻辑提供不同的构造工厂,而对于多个工厂而言需要一个统一的抽象 <?php class Config { publi ...
- 设计模式(4)--AbstractFactory(抽象工厂模式)--创建型
1.模式定义: 抽象工厂是应对产品族概念的,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类 2.模式特点: 抽象工厂模式为创建一组对象提供了一种解决方案.与工厂方法模式相比,抽象工 ...
- 八、AbstractFactory 抽象工厂模式
设计原理: 代码清单: 抽象 Factory : public abstract class Factory { public static Factory getFactory(String cla ...
- C++设计模式-AbstractFactory抽象工厂模式
AbstractFactory 要创建一组相关或者相互依赖的对象 作用:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. UML结构图: 抽象基类: 1)AbstractProdu ...
- 设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)
抽象工厂,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.对于工厂方法来说,抽象工厂可实现一系列产品的生产,抽象工厂更注重产品的组合. 看代码: 7.1.解释 main(),女 ...
- FactoryMethod工厂方法模式升级成AbstractFactory抽象工厂模式
具体参考抽象工厂(AbstractFactory)模式-创建型模式,本文在FactoryMethod工厂方法模式(创建型模式)的基础上进行业务进一步抽象,不做详细原理介绍. 1.在FactoryMet ...
- AbstractFactory抽象工厂模式(创建型模式)
1.new 的问题 常见的对象创建方法: //创建一个Road对象 Road road=new Road(); new的问题:实现依赖,不能应对具体实例的变化 怎么理解上面这句话呢? 可以这样理解:我 ...
- php 23种设计模型 - 抽象工厂模式
抽象工厂模式(AbstractFactory) 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创 ...
随机推荐
- day2--课前考试题
Linux 系统命令操作语法的格式: 命令 [参数选项] [文件或路径] rm -f ...
- Java工具类之——BigDecimal运算封装(包含金额的计算方式)
日常对于金额计算,应该都是用的BigDecimal, 可是苦于没有好的工具类方法,现在贡献一个我正在用的对于数字计算的工具类,项目中就是用的这个,简单粗暴好用,话不多说,代码奉上(该工具类需要引入g ...
- Spring 4 MVC example with Maven
In this tutorial, we show you a Spring 4 MVC example, using Maven build tool. Technologies used : Sp ...
- Python之函数返回多个值
#!/usr/bin/env python26 #-*- coding:utf-8-*- def test(): a = 10 b = 20 return a,b #返回一个元组 atuple= te ...
- Server 2008 R2远程桌面授权,解决120天过期问题
平时在使用远程桌面过程,我们经常会遇到这样的两个问题. 问题一.远程桌面的连接数限制 Server 2008 R2默认远程桌面连接数是2个用户,如果多余两个用户进行远程桌面连接时,系统就会提示超过连接 ...
- Docker(社区版) centos版 安装
1,总结一下docker的安装,其实官网有很全面的资料了,可以自己上面去看,但都是英文的. https://docs.docker.com/engine/installation/linux/dock ...
- 想使用Docker容器?先看看这些注意事项
Docker容器无疑是最近十年来最引人注目的技术之一,因为有了它,对我们思考设计.开发和运维软件的方式产生了非常有益的影响. 但是就像每一个开发工具一样,为了充分利用这些工具,需要注意一些使用中问题, ...
- spring学习笔记(一) Spring概述
博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书. 强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...
- socket.io 入门篇(三)
本文原文地址:https://www.limitcode.com/detail/5926e3a056fba70278bf2044.html 前言 上篇我们介绍了 socket.io 中room的概念和 ...
- C#学习笔记随笔(1)----C#中static关键字的作用
静态分配的,有两种情况: 1. 用在类里的属性.方法前面,这样的静态属性与方法不需要创建实例就能访问, 通过类名或对象名都能访问它,静态属性.方法只有“一份”:即如果一个类新建有N个 对象,这N 个对 ...