设计模式-抽象工厂模式(AbstractFactory)(创建型模式)
//以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码
//Product.h
#pragma once
class AbstractProductA {
public:
virtual ~AbstractProductA();
protected:
AbstractProductA();
private: }; class AbstractProductB {
public:
virtual ~AbstractProductB();
protected:
AbstractProductB();
private:
}; class ProductA1 :public AbstractProductA {
public:
ProductA1();
virtual ~ProductA1();
private:
protected: }; class ProductA2 :public AbstractProductA {
public:
ProductA2();
virtual ~ProductA2();
protected:
private:
}; class ProductB1 :public AbstractProductB {
public:
ProductB1();
virtual ~ProductB1();
protected:
private: }; class ProductB2 : public AbstractProductB {
public:
ProductB2();
virtual ~ProductB2();
protected:
private: };
//Product.cpp
#include"Product.h"
#include<iostream> AbstractProductA::AbstractProductA(){}
AbstractProductA::~AbstractProductA(){}
AbstractProductB::AbstractProductB(){}
AbstractProductB::~AbstractProductB(){}
ProductA1::ProductA1() {
std::cout << "ProductA1" << std::endl;
}
ProductA1::~ProductA1(){}
ProductA2::ProductA2() {
std::cout << "ProductA2" << std::endl;
}
ProductA2::~ProductA2(){} ProductB1::ProductB1() {
std::cout << "ProductB1" << std::endl;
}
ProductB1::~ProductB1(){}
ProductB2::ProductB2() {
std::cout << "ProductB2" << std::endl;
}
ProductB2::~ProductB2() { }
//AbstractFactory.h
#pragma once
class AbstractProductA;
class AbstractProductB;
class AbstractFactory { public:
virtual ~AbstractFactory();
virtual AbstractProductA* concreateProductA() = ;
virtual AbstractProductB* concreateProductB() = ;
protected:
AbstractFactory();
private:
}; class concreateFactory1 :public AbstractFactory {
public:
concreateFactory1();
virtual ~concreateFactory1();
AbstractProductA* concreateProductA();
AbstractProductB* concreateProductB();
protected:
private:
}; class concreateFactory2 :public AbstractFactory {
public:
concreateFactory2();
virtual ~concreateFactory2();
AbstractProductA* concreateProductA();
AbstractProductB* concreateProductB();
protected:
private:
};
//AbstractFactory.cpp
#include"Product.h"
#include"AbstractFactory.h"
#include<iostream> AbstractFactory::~AbstractFactory(){}
AbstractFactory::AbstractFactory(){} concreateFactory1::concreateFactory1(){}
concreateFactory1::~concreateFactory1(){}
AbstractProductA* concreateFactory1::concreateProductA() {
return new ProductA1();
}
AbstractProductB* concreateFactory1::concreateProductB() {
return new ProductB1();
} concreateFactory2::~concreateFactory2(){}
concreateFactory2::concreateFactory2(){} AbstractProductA* concreateFactory2::concreateProductA()
{
return new ProductA2();
}
AbstractProductB* concreateFactory2::concreateProductB()
{
return new ProductB2();
}
//main.cpp
#include"Product.h"
#include"AbstractFactory.h"
#include<iostream> int main()
{
AbstractFactory* fac1 = new concreateFactory1();
fac1->concreateProductA();
fac1->concreateProductB();
AbstractFactory* fac2 = new concreateFactory2();
fac2->concreateProductA();
fac2->concreateProductB();
return ;
}
#include"Product.h"#include"AbstractFactory.h"#include<iostream>
int main(){AbstractFactory* fac1 = new concreateFactory1();fac1->concreateProductA();fac1->concreateProductB();AbstractFactory* fac2 = new concreateFactory2();fac2->concreateProductA();fac2->concreateProductB();return 0;}
设计模式-抽象工厂模式(AbstractFactory)(创建型模式)的更多相关文章
- 设计模式(Java版)-创建型模式之简单工厂模式
前言:这段时间在学习设计模式,本人也是小菜一枚(所以写的如果有错误的地方请大大们给予指出).这个东西也是我一直想学习的,从点点滴滴做起,记录下自己每天的领悟! 一.工厂模式的动机 在软件系统中,经常面 ...
- 设计模式04: Factory Methord 工厂方法模式(创建型模式)
Factory Methord 工厂方法模式(创建型模式) 从耦合关系谈起耦合关系直接决定着软件面对变化时的行为 -模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之变更 -模块与模块之间的 ...
- php设计模式(一):简介及创建型模式
我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式. 一.设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用.容易被他人理解的.可靠的代码设计经验的总结. ...
- 设计模式05: Prototype 原型模式(创建型模式)
Prototype 原型模式(创建型模式) 依赖关系的倒置抽象不应该依赖于实现细节,细节应该依赖于抽象.对所有的设计模式都是这样的. -抽象A直接依赖于实现细节b -抽象A依赖于抽象B,实现细节b依赖 ...
- 设计模式03: Builder 生成器模式(创建型模式)
Builder生成器模式(创建型模式) Builder模式缘起假设创建游戏中的一个房屋House设施,该房屋的构建由几个部分组成,且各个部分富于变化.如果使用最直观的设计方法,每个房屋部分的变化,都将 ...
- .NET设计模式(7):创建型模式专题总结(Creational Pattern)(转)
概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程.它帮助一个系统独立于如何创建.组合和表示它的那些对象.本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何使用创建型模 ...
- .NET设计模式(7):创建型模式专题总结(Creational Pattern)
):创建型模式专题总结(Creational Pattern) 创建型模式专题总结(Creational Pattern) --.NET设计模式系列之七 Terrylee,2006年1月 转载: ...
- C#面向对象设计模式纵横谈——2.Singleton 单件(创建型模式)
一:模式分类 从目的来看: 创建型(Creational)模式:负责对象创建. 结构型(Structural)模式:处理类与对象间的组合. 行为型(Behavioral)模式:类与对象交互中的职责分配 ...
- Java设计模式——建造者模式(创建型模式)
概述 建造者模式也称为生成器模式,是一种对象创建型模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 建造者模式意在为重叠构造 ...
- Java设计模式02:常用设计模式之工厂模式(创建型模式)
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Fact ...
随机推荐
- python第三次作业-mooc笔记
1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程3.学习完成第0周至第4周的课程内容,并完成各周作业 4.提供图片或网站显示的学习进度 ...
- Codeforces Round #603 (Div. 2) C. Everyone is a Winner! 二分
C. Everyone is a Winner! On the well-known testing system MathForces, a draw of n rating units is ar ...
- 基于Django的Rest Framework框架的解析器
本文目录 一 解析器的作用 二 全局使用解析器 三 局部使用解析器 四 源码分析 回到目录 一 解析器的作用 根据请求头 content-type 选择对应的解析器对请求体内容进行处理. 有appli ...
- vue中的父子组件相互调用
vue中的父子组件相互调用: 1.vue子组件调用父组件方法:子组件:this.$emit('xx'); 父组件:定义yy方法,并在引用子组件时传参,如@xx="yy" 2.vue ...
- 依赖注入在 dotnet core 中实现与使用:3 使用 Lazy<T> 延迟实例化
有些对象我们并不想一开始就实例化,由于性能或者功能的考虑,希望等到使用的时候再实例化.考虑存在一个类 A, 它使用了依赖的类 B,在 A 中,只有某些不常用到的方法会涉及调用 B 中的方法,多数情况下 ...
- solidity定长数组和动态数组
固定长度的数组 固定长度数组声明 直接在定义数组的时候声明固定长度数组的值: uint[5] fixedArr = [1,2,3,4,5]; 可通过数组的length属性来获得数组的长度,进而进行遍历 ...
- Redis系列---安装redis单机版02
本章将带领大家一步一步安装Redis单机版(Redis从3.0版本后就开始支持集群了,集群将会后边章节带领大家操作) 准备环境: Centos 6.X redis3.+版本(自行下载,redis 的版 ...
- Linux网络——修改配置文件
Linux网络——修改配置文件 摘要:本文主要学习了如何通过修改配置文件来设置网络参数. 配置文件 通过修改系统的配置文件为系统设置网络参数,这种方式的优点是可以永久保存,计算机重启后仍然生效.缺点是 ...
- HTML中引用CSS的几种方法
HTML中引用CSS的方法主要有 行内样式 内嵌式 链接式 导入样式 行内样式 指写在标签里的Style元素的值 <p style="color: #FF0000;"> ...
- js监听屏幕方向如何第一次默认不监听
this.supportOrientation = typeof window.orientation === 'number'; // 检查屏幕方向 checkScreenOrientation() ...