实例解析C++设计模式编程中简单工厂模式的采用

简单工厂模式中专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。它又称为静态工厂方法模式,属于类的创建型模式。
简单工厂模式的UML类图

简单工厂模式的程序通过封装继承来降低程序的耦合度,设计模式使得程序更加的灵活,易修该,易于复用。

简单工厂是在工厂类中做判断,从而创造相应的产品。

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
 
该模式中包含的角色及其职责
 
1.工厂(Creator)角色
 
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
 
2.抽象(Product)角色
 
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
 
3.具体产品(Concrete Product)角色
 
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
一般来讲它是抽象产品类的子类,实现了抽象产品类中定义的所有接口方法。
 
简单工厂模式的特点:
 
简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。
不难发现,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。

举个例子:有一家生产处理器核的厂家,它只有一个工厂,能够生产两种型号的处理器核。客户需要什么样的处理器核,一定要显示地告诉生产工厂。
下面给出一种实现方案。

#include <iostream>
using namespace std;

enum CoreType
{
 CORE_A,
 CORE_B
};

class SingleCore
{
public:
 virtual void Show() = 0;
};

/*
 * A 型号单核
 */
class SingleCoreA: public SingleCore
{
public:
 void Show()
 {
 cout<<"show SingleCoreA"<<endl;
 }
};

/*
 * B 型号单核
 */
class SingleCoreB: public SingleCore
{
public:
 void Show()
 {
 cout<<"show SingleCoreB"<<endl;
 }
};

/*
 * 唯一的工厂,可以生产单核 两种型号的处理器
 */
class Factory
{
public:
 SingleCore* CreateSingleCore(CoreType ctype)
 {
 switch(ctype)
 {
 case CORE_A:
 return new SingleCoreA();

 case CORE_B:
 return new SingleCoreB();

 default:
 return NULL;
 }
 }
};

int main()
{
 Factory   *pstFactory;
 SingleCore *pstSingleCore;

 pstFactory  = new Factory();

 /*
 * 生产A核
 */
 pstSingleCore = pstFactory->CreateSingleCore(CORE_A);
 pstSingleCore->Show();

 system("pause");

 /*
 * 生产B核
 */
 pstSingleCore = pstFactory->CreateSingleCore(CORE_B);
 pstSingleCore->Show();

 /*
 * 生产A核
 */
 pstSingleCore = pstFactory->CreateSingleCore(CORE_A);
 pstSingleCore->Show();

 /*
 * 生产A核
 */
 pstSingleCore->Show();

 system("pause");

 /*
 * 生产B核
 */
 pstSingleCore = pstFactory->CreateSingleCore(CORE_B);
 pstSingleCore->Show();

 return 0;
}

运行结果:

show SingleCoreA
请按任意键继续. . .
show SingleCoreB
show SingleCoreA
show SingleCoreA
请按任意键继续. . .
show SingleCoreB
Press any key to continue 
(0)

相关推荐

  • C++设计模式之工厂模式

    由遇到的问题引出工厂模式 在面向对象系统设计中经常可以遇到以下的两类问题: ◆ 1.为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口.这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的.这里很容易出现的一个问题 n 多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如 new ×××;的代码.这里带来两个问题: 客户程序员必须知道实际子类的名称(当系统复杂后,命名将是一个很不好处理的问题,

  • C++设计模式之抽象工厂模式

    问题描述 之前讲到了C++设计模式--工厂方法模式,我们可能会想到,后期产品会越来越多了,建立的工厂也会越来越多,工厂进行了增长,工厂变的凌乱而难于管理:由于工厂方法模式创建的对象都是继承于Product的,所以工厂方法模式中,每个工厂只能创建单一种类的产品,当需要生产一种全新的产品(不继承自Product)时,发现工厂方法是心有余而力不足. 举个例子来说:一个显示器电路板厂商,旗下的显示器电路板种类有非液晶的和液晶的:这个时候,厂商建造两个工厂,工厂A负责生产非液晶显示器电路板,工厂B负责生产

  • C++设计模式之简单工厂模式实例

    问题描述 之前在公司做了一个windows 8平台的阅读器.首先,需要将电子书中的内容渲染到屏幕上,而电子书每一页都包含各种各样的内容,比如:图形.图像和文字等等:不同的内容,就是不同的对象:在将不同的内容渲染到屏幕上之前,就需要new操作,建立不同的对象,然后再在屏幕上进行描绘.这个时候,就需要进行很多new操作,new操作分布在代码的不同地方,管理起来很麻烦,而且也很乱,到后期扩展和维护的时候,有的时候,对象多的让开发人员不知道这个对象是干什么的,这就增加了难度:同时,new操作,都会有对应

  • 实例解析C++设计模式编程中简单工厂模式的采用

    简单工厂模式中专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.它又称为静态工厂方法模式,属于类的创建型模式. 简单工厂模式的UML类图 简单工厂模式的程序通过封装继承来降低程序的耦合度,设计模式使得程序更加的灵活,易修该,易于复用. 简单工厂是在工厂类中做判断,从而创造相应的产品. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例.   该模式中包含的角色及其职责   1.工厂(Creator)角色  

  • 实例解析C#设计模式编程中简单工厂模式的使用

    简单工厂模式的介绍 说到简单工厂,自然的第一个疑问当然就是什么是简单工厂模式了? 在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类, 我们平常编程中,当使用"new"关键字创建一个对象时,此时该类就依赖与这个对象,也就是他们之间的耦合度高,当需求变化时,我们就不得不去修改此类的源码,此时我们可以运用面向对象(OO)的很重要的原则去解决这一的问题,该原则就是--封装改变,既然要封装改变,自然也就要找到改变的代码,然后把改变的代码用类来封

  • 实例解析Ruby设计模式编程中Strategy策略模式的使用

    今天你的leader兴致冲冲地找到你,希望你可以帮他一个小忙,他现在急着要去开会.要帮什么忙呢?你很好奇. 他对你说,当前你们项目的数据库中有一张用户信息表,里面存放了很用户的数据,现在需要完成一个选择性查询用户信息的功能.他说会传递给你一个包含许多用户名的数组,你需要根据这些用户名把他们相应的数据都给查出来. 这个功能很简单的嘛,你爽快地答应了.由于你们项目使用的是MySQL数据库,你很快地写出了如下代码: require 'mysql' class QueryUtil def find_us

  • C++设计模式编程中简单工厂与工厂方法模式的实例对比

    简单工厂模式实例 题目:实现计算器的输入2个数和运算符,得到结果 工程结构: (1)头文件 COperationFactory.h(运算符工厂类) (2)源文件 SimpleFactory.cpp(客户端应用类,主函数所在) (3)运算类 COperation.cpp(运算符基类) COperation.h COperationAdd.h(加法运算符子类,继承于COperation) COperationDiv.h (除法运算符子类,继承于COperation) COperationMul.h

  • Java设计模式编程中简单工厂与抽象工厂模式的使用实例

    简单工厂模式 类图 通过一个工厂类,以一个条件来创建对应的对象 //业务功能 public interface ICalculation { double getResult(double numA, double numB); } public class CalcAdd implements ICalculation { @Override public double getResult(double numA, double numB) { System.out.println("加法&q

  • 深入解析C#设计模式编程中对建造者模式的运用

    示例 我们先来以这样一个场景引入:  在电脑城装机总有这样的经历.我们到了店里,先会有一个销售人员来询问你希望装的机器是怎么样的配置,他会给你一些建议,最终会形成一张装机单.和客户确定了装机配置以后,他会把这张单字交给提货的人,由他来准备这些配件,准备完成后交给装机技术人员.技术人员会把这些配件装成一个整机交给客户. 不管是什么电脑,它总是由CPU.内存.主板.硬盘以及显卡等部件构成的,并且装机的过程总是固定的: 把主板固定在机箱中 把CPU安装到主板上 把内存安装到主板上 把硬盘连接到主板上

  • 实例解析Java设计模式编程中的适配器模式使用

    平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类的方法.有一个解决方法是,修改它们各自的接口,但是这是我们最不愿意看到的.这个时候Adapter模式就会派上用场了. Adapter模式也叫适配器模式,是由GoF提出的23种设计模式的一种.Adapter模式是构造型模式之一,通过Adapter模式,可以改变已有类(或外部类)的接口形式. 适配器 模式 有三种方式,一种是对象适配器,一种是类适配器, 一种是接口适配器 以下

  • 实例讲解C++设计模式编程中State状态模式的运用场景

    State模式允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类. 在面向对象系统的开发和设计过程,经常会遇到一种情况就是需求变更(Requirement Changing),经常我们做好的一个设计.实现了一个系统原型,咱们的客户又会有了新的需求.我们又因此不得不去修改已有的设计,最常见就是解决方案就是给已经设计.实现好的类添加新的方法去实现客户新的需求,这样就陷入了设计变更的梦魇:不停地打补丁,其带来的后果就是设计根本就不可能封闭.编译永远都是整个系统代码. 访问者模式则提

  • java设计模式学习之简单工厂模式

    简单工厂模式 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 利用简单工厂模式设计一个计算器. 1:创建一个运算的类 package EasyFactoryModel; abstract class Operation { public double num1=0;

  • 实例讲解PHP设计模式编程中的简单工厂模式

    简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出那一种产品类的实例. 1.工厂模式的几种形态 工厂模式专门负责将大量有共同接口的类实例化.工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类.工厂模式有以下几种形态: (1)简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory Method Pattern). (2)工厂方法(Factory Met

随机推荐