设计模式学习-简单工厂模式

1.什么是简单工厂模式

  简单工厂模式属于类的创建模式,又叫做静态工厂模式,是通过专门建立一个类负责创建其他类的实例,被创建的类通常有着共同的父类,之所以称之为工厂,就是因为负责创建其他类的类能够根据传递参数的不同,产生不同的实例,使得程序满足松耦合、重用度高、易修改维护的特点。

2.简单工厂模式的实现

  下面举例说明工厂模式,比如说我们要实现一个两个数的size运算,那么如何去设计能过做到我们上面说的特性。首先我们要设定一个运算的终极父类:

#include <iostream>
#include <cstdio>
#include <string>
#include <map>
using namespace std;
class Operation
{
public:
    Operation():number_A(0),number_B(0){}
    virtual double getResult()
    {
        double result = 0;
        return result;
    }
    double number_A;
    double number_B;
};

  这个类中,我们明确了目标,就是要根据输入的运算符不同,得到不同的结果,因此我们就要对各个运算符的类进行设计,如下所示:

 1 class OperationAdd:public Operation
 2 {
 3 public:
 4     double getResult()
 5     {
 6         double result = 0;
 7         result = number_A+number_B;
 8         return result;
 9     }
10 };
11
12 class OperationSub:public Operation
13 {
14 public:
15     double getResult()
16     {
17         double result = 0;
18         result = number_A-number_B;
19         return result;
20     }
21 };
22
23 class OperationMul:public Operation
24 {
25 public:
26     double getResult()
27     {
28         double result = 0;
29         result = number_A*number_B;
30         return result;
31     }
32 };
33
34 class OperationDiv:public Operation
35 {
36 public:
37     double getResult()
38     {
39         double result = 0;
40         result = number_A/number_B;
41         return result;
42     }
43 };

  这些类完成以后,就相当于我们有了原料,那么这个时候,我们要做到事情就是,创建这样的一个工厂,这个工厂会根据用户的输入的变化,创造出不同的结果,其实根本上用到的就是我们所熟知的多态的特性,在这个例子中,所写的工厂如下。

class OperationFactory
{
public:
    static Operation* createOperation(string operate)
    {
        Operation *opt = NULL;
        std::map<string, int> mp;
        mp["+"] = 1;
        mp["-"] = 2;
        mp["*"] = 3;
        mp["/"] = 4;
        switch(mp[operate])
        {
            case 1: opt = new OperationAdd();break;
            case 2: opt = new OperationSub();break;
            case 3: opt = new OperationMul();break;
            case 4: opt = new OperationDiv();break;
        }
        return opt;
    }
};

  这样就实现了加减乘除的工厂,在main函数中,我们就可以使用如下的方式实现:

int main(int argc, char const *argv[])
{
    Operation *opt;
    OperationFactory OF;

    string str = "/";
    opt->number_A = 10;
    opt->number_B = 100;

    opt = OF.createOperation(str);
    cout<<opt->getResult();

    return 0;
}

3.简单工厂模式的核心竞争力

  首先,工厂模式统一的对象创建机制,优点是对于大规模的企业程序里要创建成千上万个对象,每个都去new,程序的业务逻辑就很混乱,统一由工厂创建,就比清晰。

  然后就是他能够进一步的降低耦合,能够方便的进行修改和扩充,同时也能有效的保护原来写好程序的核心。

时间: 2024-10-26 00:33:41

设计模式学习-简单工厂模式的相关文章

设计模式学习——简单工厂模式

模式概述:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,但其不属于23种GOF设计模式之一,通常它根据自变量的不同返回不同的类的实例.     UML类图: 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建出哪一个产品类的实例.由上图可以看出,简单工厂模式有工厂.抽象产品.具体产品三个角色. 工厂角色(Factory) 是

学习大话设计模式01_简单工厂模式(简易计算器)

1 /** 2 * 面向对象(运算类) 3 * 简易计算器 4 * @author Monica 5 * 6 */ 7 public class Operation { 8 private double numberA = 0; 9 private double numberB = 0; 10 11 //虚函数 12 public double GetResult() { 13 double result = 0; 14 return result; 15 } 16 17 public doub

【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式

课程回顾: 接口:1.属性:public\static\final2.方法:public\abstract 多态:1.静态化(编译时)多态重载2.动态化(运行时)多态重写对象转型 1.向上转型 2.向下转型 今日内容:内部类:定义在类的内部的类1.成员内部类格式:[修饰符] class 类名 { }内部不能有静态的属性和方法,可以访问外部类的属性,也可以调用外部类的方法 在静态方法中的使用格式:外部类 外对象=new 外部类();成员内部类 对象名=外对象.new 成员内部类(); 2.静态内部

大话设计模式之简单工厂模式

简单工厂模式 最近朋友推荐了一本书<大话设计模式>,此书刚刚到,博主也还没开始看,希望以博文的方式与大家一起分享,一起学习. 简单工厂模式,也就是说,到底要实列化谁,将来会不会增加实列化的对象,比如增加开根运算,这是很容易实列化的地方应该考虑用一个单独的类来做这个创造实列的过程,这就是工厂,来我们一起看看这个类如何写. 简单运算工厂类: import public public class OperationFactory { public static OperationFactory(st

iOS设计模式 - (3)简单工厂模式

iOS设计模式 - (3)简单工厂模式           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/details/40381721 一.简述 简单工厂模式(FACTORY),通过面向对象的封装,继承和多态来降低程序的耦合度.将一个具体类的实例化交给一个静态工厂方法来执行. 该模式中的角色包括: 工厂类(Simple Factory): 只包含了创建具体类的静态方法. 抽象产品(Product):

设计模式学习02—工厂模式

1.动机与定义 我们在程序中使用一个对象时,需要new一下,如果需要设置其他值就再初始化一下.比如我要使用一个按钮,手动new一个矩形按钮,然后初始化一些值,如显示文字,背景色等. // 矩形按钮 IButton btn = new RecButton(); // 初始化其他值 btn.setText("提交"); btn.setBackgroundColor("#00aaff"); // 其他初始化省略 // 圆形按钮 IButton btn2 = new Rou

设计模式初探——简单工厂模式

学习设计模式已经有一段时间了,<大话>也正看第二遍,可是却迟迟不敢下笔.算了,先拿简单的开刀吧. 简单工厂模式是设计模式中一种比较简单.基础的设计模式. 定义: 由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 包含元素: 工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类可以被外界直接调用,创建所需的产品对象. 抽象产品(Product)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的

01.设计模式_简单工厂模式

转载自  http://www.cnblogs.com/zhili/p/SimpleFactory.html 一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂模式的介绍 说到简单工厂,自然的第一个疑问当然就是什么是简单工厂模式了? 在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类, 我们平常编程

C#设计模式(2)——简单工厂模式

一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式——简单工厂模式. 二.简单工厂模式的介绍 说到简单工厂,自然的第一个疑问当然就是什么是简单工厂模式了? 在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类, 我们平常编程中,当使用”new”关键字创建一个对象时,此时该类就依赖与这个对象,也就是他们之间的耦合度高,当需求变化时,我