本文主要介绍C设计模式的工厂方法模式的例子。工厂模式有一个非常生动的描述。建筑对象类就像一个工厂,要建造的对象就是产品。有需要的朋友可以参考一下。
问题描述
之前在公司做了一个windows 8平台的阅读器。首先需要在屏幕上渲染电子书的内容,电子书的每一页都包含各种内容,比如图形、图像、文字等。不同的内容是不同的对象;在屏幕上呈现不同的内容之前,您需要new操作,创建不同的对象,然后在屏幕上绘制它们。这时候就需要大量的新操作。新的操作分布在代码的不同位置,这使得管理起来既麻烦又混乱。说到后期的扩展和维护,有时候,对象太多,开发者不知道这个对象是干什么用的,增加了难度;同时,对于新的操作也会有相应的异常处理。最后,您会发现在代码中,创建了一个新的对象,然后是一段异常处理代码。这时,代码变得极其混乱和臃肿。那我该怎么办呢?我该怎么办?此时,我们需要一个新的类,它专门负责对象的建立和释放。之后对象的各种操作都和这个类无关。这个类专门用于创建对象,它公开了为外部调用创建对象的接口。
模型有非常生动的描述。待建对象的类就像一个工厂,待建对象就是产品。在工厂里加工和使用产品的人并不关心产品是如何生产出来的。从软件开发的角度来看,这有效地降低了模块之间的耦合。
UML类图
对于工厂模型,它可以分为三类:
1.工厂方法模式;
2.工厂方法模式;
3.抽象工厂。
对于以上三个工厂模型,从上到下逐渐抽象,更加通用。这篇博文主要讲的是工厂方法模式,后两个会在后面的博文中总结。
ProductA、ProductB、ProductC继承自Product的虚类,展现方法是不同产品的自我描述;工厂依赖于ProductA、ProductB和ProductC,工厂根据不同的条件创建不同的产品对象。
适用场合
1.在程序中,要创建的对象很多,导致对象的新操作多而复杂,需要使用工厂方法模式;
2.因为我们不需要关心对象的创建过程,而是专注于对象的实际操作,所以需要将对象的创建和操作分开,以便于后期的程序扩展和维护。
代码实现:
/*
**文件名:简单工厂模式
**作者:杰利扬
**日期:2013年11月17日
**描述:更多信息
*/
#包括iostream
#包含矢量
使用命名空间std
typedef枚举ProductTypeTag
{
TypeA,
b型,
USB一种类型的接口
} PRODUCTTYPE
//这里是产品类
类别产品
{
公共:
虚拟void Show()=0;
};
a类产品:公共产品
{
公共:
无效显示()
{
cout 'I 'm ProductA 'endl
}
};
b类产品:公共产品
{
公共:
无效显示()
{
cout ' I ' m product b ' endl;
}
};
产品c类:公共产品
{
公共:
无效显示()
{
cout 'I 'm ProductC 'endl
}
};
//这里是工厂类
类工厂
{
公共:
产品*创建产品(产品类型类型)
{
开关(类型)
{
案例类型a:
返回新的ProductA();
案例类型b:
返回新的ProductB();
案例类型c:
返回新的product c();
默认值:
返回NULL
}
}
};
int main(int argc,char *argv[])
{
//首先,创建一个工厂对象
Factory * product Factory=new Factory();
product * producto bja=product factory-create product(type a);
if (productObjA!=空)
product obja-Show();
product * productObjB=product factory-create product(type b);
if (productObjB!=空)
productObjB-Show();
product * product objc=产品工厂-创建产品(type c);
if(产品obj!=空)
producto bjc-show();
删除产品工厂:
ProductFactory=NULL:
删除产品对象:
productobja=null:
删除productObjB:
productobjb=null
删除产品目标:
productObjC=NULL:
返回0;
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。