4.工厂方法模式

1工厂方法模式的核心内容是:

A:每种方法通过独立的类来表示。

B:通过工厂来创建实例化方法

C:理解:带同一个妹子到不同的地点(麦当劳,肯德基….)去吃饭.

2工厂方法模式的作用:程序访问不同的工厂,来让工厂创建自己想要的操作。

3工厂方法模式具体描述

工厂方法模式:核心工厂类不再负责所有产品的创建,

而是将具体创建的工作交给子类去做,成为一个抽象工厂角色

仅负责给出具体工厂类必须实现的接口,

而不接触哪一个产品类应当被实例化这种细节。

 

请MM去麦当劳吃汉堡,不同的MM有不同的口味,

要每个都记住是一件烦人的事情,我一般采用Factory Method模式,

带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,

让MM直接跟服务员说就行了。

4.工厂方法模式类图

5.代码:

#include<iostream>

#include
<string>

 

using
namespace
std;

 

//工厂方法模式:核心工厂类不再负责所有产品的创建,

//而是将具体创建的工作交给子类去做,成为一个抽象工厂角色

//,仅负责给出具体工厂类必须实现的接口,

//而不接触哪一个产品类应当被实例化这种细节。

 

//请MM去麦当劳吃汉堡,不同的MM有不同的口味,

//要每个都记住是一件烦人的事情,我一般采用Factory Method模式,

//带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,

//让MM直接跟服务员说就行了。

 

//操作类

class
Operation

{

public:

   
double
numberA,
numberB;

   
virtual
double 
getResult()//

   
{

       
return 0;

   
}

};

 

//加操作

class
addOperation :public
Operation

{

   
double
getResult()

   
{

       
return
numberA +
numberB;

   
}

};

 

//减操作

class
subOperation :public
Operation

{

   
double
getResult()

   
{

       
return
numberA -
numberB;

   
}

};

 

//乘操作

class
mulOperation :public
Operation

{

   
double
getResult()

   
{

       
return
numberA*numberB;

   
}

};

 

//除操作

class
divOperation :public
Operation

{

   
double
getResult()

   
{

       
return
numberA /
numberB;

   
}

};

 

//工厂

class
IFactory

{

public:

   
virtual
Operation *createOperation()
= 0;

};

 

//add工厂

class
AddFactory :public
IFactory

{

public:

   
static
Operation *createOperation()

   
{

       
return
new
addOperation();

   
}

};

 

//减工厂

class
SubFactory :public
IFactory

{

public:

   
static
Operation *createOperation()

   
{

       
return
new
subOperation();

   
}

};

 

//乘工厂

class
MulFactory :public
IFactory

{

public:

   
static
Operation *createOperation()

   
{

       
return
new
mulOperation();

   
}

};

 

//除操作

class
DivFactory :public
IFactory

{

public:

   
static
Operation *createOperation()

   
{

       
return
new
divOperation();

   
}

};

 

int
main()

{

   
Operation *oper
= MulFactory::createOperation();

   
oper->numberA
= 9;

   
oper->numberB
= 99;

   
cout <<
oper->getResult()
<< endl;

   
cin.get();

   
return 0;

}

运行结果如下:

891



时间: 2024-08-03 12:41:31

4.工厂方法模式的相关文章

设计模式的C++实现之工厂方法模式

工厂方法模式不同于简单工厂模式的地方在于工厂方法模式把对象的创建过程放到里子类里.这样工厂父对象和产品父 对象一样,可以是抽象类或者接口,只定义相应的规范或操作,不涉及具体的创建或实现细节. 其类图如下: 实例代码为: #pragma once class IProduct { public: IProduct(void); virtual ~IProduct(void); }; #pragma once #include "iproduct.h" class IPad : publi

用AspectJ实现工厂方法模式

工厂方法模式根据产品的等级结构使用对应的工厂来创建特定的产品,它一般包括抽象工厂.具体工厂和抽象产品.具体产品,每一个特定工厂用于创建一个对应的产品.模式的简易UML图例如下 下面是使用AspectJ实现的工厂方法模式UML图 抽象方面FactoryMethodProtocol很简单只定义了抽象pointcut createMethod用于捕捉特定应用的创建方法(也可以省略). FactoryMethodProtocol抽象方面 public abstract aspect FactoryMet

Java设计模式之工厂方法模式

一 .工厂方法(Factory Method)模式 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品. 二. 工厂方法模式角色与结构 抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关.任何在模式中创建的对象的工厂类必须实现这个接口. 具体工厂(Concrete

炒冷饭系列:设计模式 工厂方法模式

一.什么是工厂方法模式 工厂方法模式同样属于类的创建型模式又被称 为多态工厂模式 .工厂方法模式的意义是定义一个创建 产品对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责产品的创建,这样核心类成为一个 抽象工厂角色,仅负责具体工厂子类必须实现的接口, 这样进一步抽象化的好处是使得工厂方法模式可以使系 统在不修改具体工厂角色的情况下引进新的产品. 二.模式中包含的角色及其职责 1.抽象工厂(Creator)角色 工厂方法模式的核心,任何工厂类都必须实现这个接口. 2.具体工厂(

工厂方法模式实现多功能日志记录

有时,我们在开发的时候,会遇到一些关于日志记录的功能.并且,它们可能是独立于系统业务逻辑的,那么我们就可以将日志做成组件的形式,以方便复用. 以下采用工厂方法模式,来实现日志组件的设计,并保证对功能的扩展不会改变已有的实现. 我们实现三种日志记录类型:错误日志记录.按钮点击日志记录.操作日志记录. 首先,我们创建一个"抽象工厂"[其实是各实例工厂都必须实现的Log接口],既然是日志记录,那么就需要有日志的实体了.也就是LogEntity,它是一个"抽象实体",因为不

iOS设计模式之工厂方法模式

工厂方法模式 基本理解 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 简单工厂的最大优点就是工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对客户端来说,去除了具体产品的依赖.但是它违背了开发封闭原则,如果新添加运算类则需要修改工厂类. 工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断转移到了客户端代码来进行.如果想添加新的运算功

PHP中的工厂方法模式

PHP手册中的工厂方法 •使用工厂来替换new操作 •思路:动态的根据传递的数据,新建相应的类的对象. •<?php class Example {     // The parameterized factory method     public static function factory(type)     {         if (include_once 'Drivers/' .type)     {         if (include_once 'Drivers/' .ty

.NET设计模式:工厂方法模式(Factory Method)

概述 在软件系统中,经常面临着"某个对象"的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口.如何应对这种变化?提供一种封装机制来隔离出"这个易变对象"的变化,从而保持系统中"其它依赖该对象的对象"不随着需求的改变而改变?这就是要说的Factory Method模式了. 意图 定义一个用户创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 结构图 生活中

C#设计模式(3)——工厂方法模式

原文:C#设计模式(3)--工厂方法模式 一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是--简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以解决简单工厂模式中存在的这个问题,下面就具体看看工厂模式是如何解决该问题的. 二.工厂方法模式的实现 工厂方法模式之所以可以解决简单工厂的模式,是因为它的实现把具体产品的创建推迟到子类中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这

Android设计模式系列之工厂方法模式_Android

工厂方法模式,往往是设计模式初学者入门的模式,的确,有人称之为最为典型最具启发效果的模式. android中用到了太多的工厂类,其中有用工厂方法模式的,当然也有很多工厂并不是使用工厂方法模式的,只是工具管理类. 今天以ThreadFactory举例说明一下简单工厂模式和工厂方法模式. 工厂方法模式,Factory Method,简单的方式,不简单的应用. 1.意图 定义一个用于创建对象的接口,让子类决定实例化哪个类.工厂方式模式使一个类的实例化延迟到其子类. 热门词汇:虚构造器 延迟 创建对象