3.抽象工厂模式



1抽象工厂模式的核心内容是:

A:消费者不同,可以任意创建

B:操作不同

C:根据不同的工厂创建不同的消费者和相应的操作。

2抽象工厂模式的作用:不同的人,不同的操作,通过工厂来满足这不同的人和创建不同的操作。

3抽象工厂模式具体描述

工厂模式:客户类和工厂类分开。

消费者任何时候需要某种产品,只需向工厂请求即可。

消费者无须修改就可以接纳新产品。缺点是当产品修改时,

工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,

虽然口味有所不同,但不管你带MM去麦当劳或肯德基,

只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory。

消费者不固定,工厂者不固定,(工厂根据消费者动作)

实现消费者抽象基类,消费者派生类的实现,实例化就是消费者

操作的抽象基类,实现派生类各种操作,实例化的操作

工厂的抽象类,抽象类包含了两个抽象类的接口(消费者,操作)

抽象类实现了工厂类的抽象,实例化的派生类,实现工厂,

根据用户设置用户,根据操作设置操作

4.策略模式类图

5.代码:

#include<iostream>

#include
<string>

using
namespace
std;

//工厂模式:客户类和工厂类分开。

//消费者任何时候需要某种产品,只需向工厂请求即可。

//消费者无须修改就可以接纳新产品。缺点是当产品修改时,

//工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

//

//追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,

//虽然口味有所不同,但不管你带MM去麦当劳或肯德基,

//只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory。

//消费者不固定,工厂者不固定,(工厂根据消费者动作)

//实现消费者抽象基类,消费者派生类的实现,实例化就是消费者

//操作的抽象基类,实现派生类各种操作,实例化的操作

//工厂的抽象类,抽象类包含了两个抽象类的接口(消费者,操作)

//抽象类实现了工厂类的抽象,实例化的派生类,实现工厂,

//根据用户设置用户,根据操作设置操作

class
IUser

{

public:

//纯虚接口类,抽象类

virtual
void
getUser() = 0;

virtual
void
setUser() = 0;

};

//继承抽象实现sql数据库使用者的实例化

class
SqlUser :public
IUser

{

public:

void
getUser()

{

cout <<
"在sql中返回user"
<< endl;

}

void
setUser()

{

cout <<
"在sql中设置user"
<< endl;

}

};

//继承抽象实现access数据使用者的实例化

class
AccessUser :public
IUser

{

public:

void
getUser()

{

cout <<
"在Access中返回user"
<< endl;

}

void
setUser()

{

cout <<
"在Access中设置user"
<< endl;

}

};

//抽象类,提供接口

class
IDepartment

{

public:

virtual
void
getDepartment() = 0;

virtual
void
setDepartment() = 0;

};

//SQL操作的实现

class
SqlDepartment :public
IDepartment

{

public:

void
getDepartment()

{

cout <<
"在sql中返回Department"
<< endl;

}

void
setDepartment()

{

cout <<
"在sql中设置Department"
<< endl;

}

};

//access操作的实现

class
AccessDepartment :public
IDepartment

{

public:

void
getDepartment()

{

cout <<
"在Access中返回Department"
<< endl;

}

void
setDepartment()

{

cout <<
"在Access中设置Department"
<< endl;

}

};

//抽象工厂

class
IFactory

{

public:

virtual
IUser *createUser()
= 0;

virtual
IDepartment *createDepartment()
= 0;

};

//抽象工厂一个实现

class
SqlFactory :public
IFactory

{

public:

IUser *createUser()

{

return
new
SqlUser();

}

IDepartment *createDepartment()

{

return
new
SqlDepartment();

}

};

//抽象工厂一个实现

class
AccessFactory :public
IFactory

{

public:

IUser *createUser()

{

return
new
AccessUser();

}

IDepartment *createDepartment()

{

return
new
AccessDepartment();

}

};

//变相的实现了静态类

class
DataAccess

{

private:

static
string
db;

//string db="access";

public:

static
IUser *createUser()

{

if (db
== "access")

{

return
new
AccessUser();

}

else
if (db
== "sql")

{

return
new
SqlUser();

}

}

static
IDepartment *createDepartment()

{

if (db
== "access")

{

return
new
AccessDepartment();

}

else
if (db
== "sql")

{

return
new
SqlDepartment();

}

}

};

string
DataAccess::db
= "sql";

int
main()

{

//IFactory *factory=new SqlFactory();

IFactory *factory;//抽象工厂

IUser *user;//抽象消费者

IDepartment *department;//提供的操作

factory =
new
AccessFactory();//基类的指针指指向派生类的对象

user =
factory->createUser();//基类的指针指向派生类的对象

department =
factory->createDepartment();//基类的指针指向派生类的对象

user->getUser();

user->setUser();//访问acesss接口

department->getDepartment();

department->setDepartment();//接口

cout <<
"--------------------" <<
endl;

user =
DataAccess::createUser();

department =
DataAccess::createDepartment();

user->getUser();

user->setUser();

department->getDepartment();

department->setDepartment();

cin.get();

return 0;

}

运行结果如下:

时间: 2025-01-03 15:44:05

3.抽象工厂模式的相关文章

抽象工厂模式

思考:工厂方法模式:http://www.cnblogs.com/maggiejyt/p/7561253.html 工厂方法模式UML: 问题:如果这家工厂不止要生产Ball(球),还要还有Sneakers(球鞋)等 则UML图为 当Product有多种类时则是抽象工厂模式 代码(Ball的代码见简单工厂模式:http://www.cnblogs.com/maggiejyt/p/7561253.html) Sneakers(球鞋抽象类) package com.maggie.FactoryMet

Java设计模式—工厂方法模式&amp;抽象工厂模式

工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义:Creator为抽象创建 类,也就是抽象工厂,具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的. 工厂方法模式的扩展方式有很多种,下边是工厂方法模式一个比较实用的源代码: 抽象产品类: pub

大话设计模式:抽象工厂模式

抽象方法模式:提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们具体的类. 三种模式的对比:   简单工厂模式 工厂模式 抽象工厂模式 产品 可以有多个但是都属于同一类, 同一等级.都继承产品抽象类. 可以有多个但是都属于同一类,同一等级. 都继承产品抽象类. 可以有不同种类的产品,每类有多中 具体产品: 抽象产品 只能有一个 只能有一个; 多个抽象产品类:每个抽象产品类可 以派生多种具体产品: 抽象工厂类   只能有一个,可以派生出多个具体工厂类: 只有一个,可派生出多个具体工厂类:

【设计模式】1、抽象工厂模式

对于这个抽象工厂的相应的代码实现 /** * 功能:抽象工厂模式的作用 适用性 1.一个系统要独立于它的产品的创建.组合和表示时. 2.一个系统要由多个产品系列中的一个来配置时. 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时. 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时. * 时间:2016年2月11日22:18 * 作者:cutter_point */ package com.shejimoshi.create.AbstractFactory; public in

设计模式(三)---抽象工厂模式

1. 简介:为创建一组相关或相互依赖的对象提供一个接口,无需指定它们的具体类.抽象工厂模式通常是用于创创建一族产品,并且这族产品分不同的等级:不同的具体工厂类生产不同等级的一族产品. 2. 抽象工厂UML图 3.抽象工厂示意性类图 4.类图分析 从上图可以看出,抽象工厂模式涉及到以下四个角色 4.1:抽象工厂:担任这个角色的是工厂方法模式的核心,它与应用无关,任何在模式中创建对象的工厂都必须实现这个接口,在实际应用中,这个角色由java抽象类或接口来实现 4.2:具体工厂:担任这个角色的是抽象工

设计模式(3)抽象工厂模式(Abstract Factory)

设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 源码地址 0 抽象工厂模式简介 0.0 抽象工厂模式定义 抽象工厂模式一般的书面定义为:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类 提供创建接口,无需指定具体实现类,这个原则在简单工厂模式和工厂方法模式篇已经反复讲到了,这是面向接口编程的一个基本准则,很显然,从抽象工厂模式的一般定义中可以看出这也是抽象工厂模式的一个核心,而抽象工厂模式的另

c++ 设计模式9 (Abstract Factory 抽象工厂模式)

5.2 抽象工厂模式 动机:在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时,由于需求的变化,往往存在更多系列对象的创建工作. 代码示例: 实现利用数据库的业务逻辑,支持多数据库(Sql,Oracle等),有连接.命令.读取等功能. 其中命令,连接功能之间有相互联系. 方法一(使用工厂方法): 每个功能类有一个创建的工厂,如IDBConnection与IDBConnectionFactory 1 //数据库访问有关的基类 2 class IDBConnection{ 3

JAVA设计模式之抽象工厂模式 (转)

前面已经介绍过简单工厂模式和工厂方法模式,这里继续介绍第三种工厂模式-抽象工厂模式,还是以汽车的制造为例. 例子背景: 随着客户的要求越来越高,宝马车需要不同配置的空调和发动机等配件.于是这个工厂开始生产空调和发动机,用来组装汽车.这时候工厂有两个系列的产品:空调和发动机.宝马320系列配置A型号空调和A型号发动机,宝马230系列配置B型号空调和B型号发动机. 概念: 抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象.比如宝马320系列使用空调型号A和发动机型号A,而宝

抽象工厂模式的C++、Java实现

1.抽象工厂模式UML 图1. 抽象工厂模式的UML 2.C++实现 C++实现类图为: 图2. 抽象工厂模式的C++实现类图 其中,AbstractFactory的实现代码为: 1 //抽象工厂类基类. 2 class AbstractFactory 3 { 4 public: 5 AbstractFactory(); 6 ~AbstractFactory(); 7 8 //创建具体的产品的抽象工厂方法. 9 //创建A类对象. 10 virtual ProductA * CreateProd

设计模式-抽象工厂模式(C#)

设计模式--抽象工厂模式(JAVA) 在抽象工厂模式中,一个具体工厂可以生产一组相关的具体产品,这样的一组产品成为产品族,产品族中的每一个产品都属于某一个产品继承等等级结构.当系统所提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构.属于不同类型的具体产品时就可以使用抽象工厂模式. 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建,当一个工