没有合适的资源?快使用搜索试试~ 我知道了~
常见设计模式的解析和实现(C++)整理版
5星 · 超过95%的资源 需积分: 32 22 下载量 97 浏览量
2015-05-28
20:19:17
上传
评论 1
收藏 897KB PDF 举报
温馨提示
常见设计模式的解析和实现(C++)整理版,整理挺全面
资源推荐
资源详情
资源评论
常见设计模式的解析和实现
常见设计模式的解析和实现(C+ + )之一-Factory 模式
作用:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一
个类的实例化延迟到其子类。
UML 结构图:
抽象基类:
1) Product:创建出来的对象的抽象基类.
2) Factory 创建对象的工厂方法的抽象基类.
接口函数:
l)Creator::FactoryMethod:纯虚函数,由派生类实现,创建出对应的 Product.
解析:
在这个模式中,有两个抽象基类,一个是 Product 为创建出来的对象的抽象基类,一个
是 Factory 是工厂的抽象基类,在互相协作的时候都是由相应的 Factory 派生类来生成
Product 的派生类,也就是说如果要新增一种 Product 那么也要对应的新增一个
Factory, 创 建 的 过 程 委 托 给 了 这 个 Factory. 也 就 是 说 一 个 Factory 和一个
Product 是一一对应的关系.
备注:
设计模式的演示图上把 Factory 类命名为 Creator,下面的实现沿用了这个命名.
演示实现:
//Factory.cpp
//factory模式演示
#include<iostream>
using namespace std;
class Product
{
public:
Product(){}
virtual ~Product(){}
};
class ConcreteProduct:public Product
{
public:
ConcreteProduct()
{ cout<<"construction of ConcreteProduct"<<endl; }
virtual ~ConcreteProduct()
{ cout<<"destruction of ConcreteProduct"<<endl; }
};
class Creator
{
public:
Creator(){}
virtual ~Creator(){}
void AnOperation()
{
Product* p = FactoryMethod();
cout<<"an operation of product"<<endl;
}
protected:
virtual Product* FactoryMethod()=0;
};
class ConcreteCreator:public Creator
{
public:
ConcreteCreator()
{ cout<<"construction of ConcreteCreator"<<endl; }
virtual ~ConcreteCreator()
{ cout<<"destruction of ConcreteCreator"<<endl; }
protected:
virtual Product* FactoryMethod()
{ return new ConcreteProduct(); }
};
int main()
{
Creator *p = new ConcreteCreator();
p->AnOperation();
delete p;
return 0;
}
常见设计模式的解析和实现(C++)之二-Abstract Factory 模式
作用:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
UML 结构图:
抽象基类:
1)ProductA,ProductB:分别代表不同类型的产品,而它们的派生类则是这种产品的一
个实现.
2)AbstractFactory:生产这一系列产品的一个抽象工厂,它的派生类是不同的实现.
接口函数:
1)AbstractFactory::CreateProductA 和 AbstractFactory::CreateProductB:
分别是生产不同产品的不同的实现,由各个派生出来的抽象工厂实现之.
解析:
Abstract Factory 模式和 Factory 最大的差别就是抽象工厂创建的是一系列相关的对象,
其中创建的实现其实采用的就是 Factory 模式的方法,对于某个实现的有一个派生出来的
抽象工厂,另一个实现有另一个派生出来的工厂,等等.
可以举一个简单的例子来解释这个模式:比如,同样是鸡腿(ProductA)和汉堡(Prod
UctB),它们都可以有商店出售(AbstractFactory),但是有不同的实现,有肯德基(C
OncreateFactoryl)和麦当劳(ConcreateFactory2)两家生产出来的不同风味的鸡
腿和汉堡(也就是 ProductA 和 ProductB 的不同实现),而负责生产汉堡和鸡腿的
就是之前提过的 Factory 模式了.
抽象工厂需要特别注意的地方就是区分不同类型的产品和这些产品的不同实现.显而易
见的,如果有 n 种产品同时有 m 中不同的实现,那么根据乘法原理可知有 n*m 个
Factory 模式的使用.
实现:
//abstract_factory.cpp
#include<iostream>
using namespace std;
//抽象基类AbstractProductA,代表产品A的抽象
class AbstractProductA
{
public:
AbstractProductA(){}
virtual ~AbstractProductA(){}
};//派生类ConcreateProductAl,继承自AbstractProductA,代表产品A的第一种实现
class ConcreateProductA1:public AbstractProductA
{
public:
ConcreateProductA1()
{ cout<<"ConcreateProdcutA1"<<endl; }
virtual ~ConcreateProductA1(){}
};
//派生类ConcreateProductA2,继承自AbstractProductA,代表产品A的第二种实现
class ConcreateProductA2:public AbstractProductA
{
public:
ConcreateProductA2()
{ cout<<"ConcreateProductA2"<<endl; }
virtual ~ConcreateProductA2(){}
};
//抽象基类AbstractProductB,代表产品B的抽象
class AbstractProductB
{
public:
AbstractProductB(){}
virtual ~AbstractProductB(){}
};
//派生类ConcreateProductB1,继承自AbstractProductB,代表产品B的第一种实现
class ConcreateProductB1:public AbstractProductB
{
public:
ConcreateProductB1()
{ cout<<"ConcreateProductB1"<<endl; }
virtual ~ConcreateProductB1(){}
};
//派生类ConcreateProductB2,继承自AbstractProductB,代表产品B的第二种实现
class ConcreateProductB2:public AbstractProductB
{
public:
ConcreateProductB2()
{ cout<<"ConcreateProductB2"<<endl; }
virtual ~ConcreateProductB2(){}
};
//抽象基类AbstractFactory,工厂的抽象类,生产产品A和产品B
class AbstractFactory
{
public:
AbstractFactory(){}
virtual ~AbstractFactory(){}
virtual AbstractProductA* CreateProductA()=0;
virtual AbstractProductB* CreateProductB()=0;
};
// 派生类 ConcreateFactoryl,继承自 AbstractFactory,生产产品A和产品B的第一种实现class
ConcreteFactory1:public AbstractFactory
{
public:
ConcreteFactory1()
{ cout<<"ConcreteFactory1"<<endl; }
virtual ~ConcreteFactory1(){}
virtual AbstractProductA* CreateProductA()
{ return new ConcreateProductA1(); }
virtual AbstractProductB* CreateProductB()
{ return new ConcreateProductB1(); }
};
剩余50页未读,继续阅读
资源评论
- zhuipolunpu9932015-05-29是不是少点什么?我打不开呀
zhangxiyun_baba
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于javaswing的可视化学生信息管理系统
- 车辆、人检测14-TFRecord数据集合集.rar
- 车辆、人员、标志检测26-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 一款完全免费的屏幕水印工具
- 基于PLC的空调控制原理图
- 基于VUE的短视频推荐系统
- Windows环境下Hadoop安装配置与端口管理指南
- 起重机和汽车检测17-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- XAMPP 是一个免费且易于安装的Apache发行版
- 汽车软件需求开发与管理-从需求分析到实现的全流程解析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功