简单工厂模式(静态工厂方法模式)

以计算器程序为例:只需输入运算符号,程序就实例化出合适的对象。通过多态,返回父类的方式实现了计算器的结果。

1)静态工厂方法统一管理对象的创建。

  静态工厂方法通过传入的参数判断决定创建哪一个产品的实例,封装了对象的创建,客户端只管消费,实现了对责任(模块)的分割。

2)静态工厂方法推迟了产品的实例化。

  通过XML配置文件就能改变具体创建的产品实例,修改为其他的产品实例,代码不须重新编译。

              简单工厂模式结构图

C++代码实例实现:

  1 #include<iostream>
  2 using namespace std;
  3
  4 class Operation{
  5 private:
  6     double numberA;
  7     double numberB;
  8 public:
  9     Operation();
 10     double GetNumberA();
 11     void SetNumberA(double);
 12     double GetNumberB();
 13     void SetNumberB(double);
 14     virtual double GetResult()
 15     {
 16         double result = 0;
 17         return result;
 18     }
 19 };
 20 //函数实现
 21 Operation::Operation()
 22 {
 23     numberA = 0;
 24     numberB = 0;
 25 }
 26 double Operation::GetNumberA()
 27 {
 28     return numberA;
 29 }
 30 void Operation::SetNumberA(double a)
 31 {
 32     numberA = a;
 33 }
 34
 35 double Operation::GetNumberB()
 36 {
 37     return numberB;
 38 }
 39 void Operation::SetNumberB(double b)
 40 {
 41     numberB = b;
 42 }
 43
 44 class OperationAdd : public Operation
 45 {
 46 public:
 47     virtual double GetResult()
 48     {
 49         double result = 0;
 50         result = GetNumberA() + GetNumberB();
 51         return result;
 52     }
 53 };
 54 class OperationSub : public Operation
 55 {
 56 public:
 57     virtual double GetResult()
 58     {
 59         double result = 0;
 60         result = GetNumberA() - GetNumberB();
 61         return result;
 62     }
 63 };
 64 class OperationMul : public Operation
 65 {
 66 public:
 67     virtual double GetResult()
 68     {
 69         double result = 0;
 70         result = GetNumberA() * GetNumberB();
 71         return result;
 72     }
 73 };
 74 class OperationDiv : public Operation
 75 {
 76 public:
 77     virtual double GetResult()
 78     {
 79         double result = 0;
 80         if(GetNumberB() == 0)
 81             return -1;
 82         result = GetNumberA() / GetNumberB();
 83         return result;
 84     }
 85 };
 86 //工厂类
 87 class OperationFactory
 88 {
 89 public:
 90     //静态工厂方法
 91     static Operation* createOperate(char c)
 92     {
 93         switch(c)
 94         {
 95         case ‘+‘:
 96             return new OperationAdd();
 97             break;
 98         case ‘-‘:
 99             return new OperationSub();
100             break;
101         case ‘*‘:
102             return new OperationMul();
103             break;
104         case ‘/‘:
105             return new OperationDiv();
106             break;
107         }
108         return NULL;
109     }
110
111 };
112 void main()
113 {//客户端代码
114
115     OperationFactory operfactory;
116     Operation *oper = operfactory.createOperate(‘+‘);
117     oper->SetNumberA(2);
118     oper->SetNumberB(4);
119     double result = oper->GetResult();
120     cout << result <<endl;
121 }

这样就实现了后台代码与界面实现代码的隔离。不管是控制台程序,Windows程序,Web程序,都可以用客户端代码实现计算器的功能。界面的修改与运算程序无关。如果我们要更改加法运算,只需改OperationAdd类就可以,如果需要增加复杂运算,只需增加相应的运算子类并修改运算类工厂,在switch中加入一个分支就可以。

时间: 2024-08-03 07:27:55

简单工厂模式(静态工厂方法模式)的相关文章

【C#设计模式——创建型模式】工场方法模式

工场方法模式对简单工场模式进行了乔庙的扩展,不是用一个专门的类来决定实例化哪一个子类.相反,超类把这种决定延迟到每个子类.这种模式实际上没有决策点,就是没有直接选择一个子类实例化的决策. 看书上的例子有点复杂,自己写了一个简单例子: 示例目标:对数组进行定向排序 基类FormatList对指定数组进行排序,具体实现交给子类实现 public abstract class FormatList { public int[] result; protected abstract void Forma

原型模式和模版方法模式

首先我们来了解原型模式 定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 根据定义,我们很明显地知道原型模式的对象是类.通过原型模式,我们可以无限地复制原型的对象 接着我们了解模版方法模式 定义:定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中.模版方法使用使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 其实就是规定完成某件事情需要做多少步,并且规定那些需要你发挥自己的想象.能力根据实际情况去完成的. 综上所述.这两种设计模式的对象不同.原型是一个大的

简单工厂模式(静态工厂方法模式)【设计模式】

定义:提供一个创建实例的功能,客户端使用者无需关心实例的具体实现.被创建实例可以是接口.抽象类,也可以是具体的类.它又称为静态工厂方法(Static Factory Method)模式 简单工厂模式的作用,优点:为客户端屏蔽所需要的实例的具体实现,客户端只需关注某个接口便可,无需关注实现.具体实现被封装起来:客户端和具体实现解耦,客户端只需关注接口,接口的实现变化对客户端没有影响.总结起来,就是封装功能,封转实例的具体实现:解耦功能,接口实现的变化影响不了客户端. 例子: 例子1:不带参数 没有

php设计模式 — 简单工厂模式(静态工厂方法模式)

概念 简单工厂模式 [静态工厂方法模式](Static Factory Method) 是类的创建模式 工厂模式的几种形态: 1.简单工厂模式(Simple Factory) |又叫做  静态工厂方法模式(Static Factory Method) 2.工厂方法模式(Factory Method) |又叫做 多态性工厂模式(Polymorphic Factory) 3.抽象工厂模式(Abstract Factory) |又叫做 工具箱模式(ToolKit) 配图 代码实例 直接将代码运行即可,

简单工厂模式--工厂方法模式(简介)

一.简单工厂模式(静态工厂) 简单工厂模式不属于23种标准设计模式 简单工厂模式是工厂方法模式的一个特殊的实现 简单工厂就是由一个工厂类根据传入的参数决定创建出哪一种产品类的实例  二.实现 产品接口或者抽象类 package factory; /* * 产品接口 */ public interface Product { //生产工艺 public void craftwork(); //产品类型 public void type(); } 实现的子类 package factory; /*

设计模式实战应用之五:工厂方法模式

工厂方法模式的定义        工厂方法模式的应用相当广泛. 工厂方法模式在 Java API 中的应用比比皆是:java.util.Collection 接口的 iterator 方法就是一个非常著名的工厂方法模式的演示样例:java.net.URLStreamHandlerFactory 的 createURLStreamHandler(String protocol)  也是工厂方法模式的一个非常经典的应用,URLStreamHandlerFactory 定义了一个用来创建 URLStr

浅析 抽象工厂、工厂方法、简单(静态)工厂

----简单工厂 (也叫静态工厂模式):一个抽象产品抽象出多个具体产品类,一个具体工厂类 代码: //抽象产品角色 public interface Car{ public void drive(); } //具体产品角色 public class Benz implements Car{ public void drive() { System.out.println("Driving Benz "); } } public class Bmw implements Car{ pub

简单工厂(静态工厂)

简单工厂模式是属于创建型模式,又叫做静态工厂.是由一个工厂对象(Factory)决定创建出哪一种产品类(Product)的实例. 设计模式可以结合具体场景进行分析,但不要局限在具体场景中,本文直接使用模型进行说明,相对抽象,但对举一反三有好处. base.h #ifndef BASE_H #define BASE_H #include <string> using namespace std; class IBase { public: virtual ~IBase(); virtual co

Head First设计模式——简单工厂、工厂、抽象工厂

前言:按照惯例我以Head First设计模式的工厂模式例子开始编码学习.并由简单工厂,工厂模式,抽象工厂模式依次演变,归纳他们的相同与不同. 话说Head First认为简单工厂并不是设计模式,而是一种编程习惯,但并不妨碍我们使用它,接下来我们对工厂模式一探究竟. 1.披萨店例子 首先我们要开一个披萨店,对于业务不复杂的情况下我们可以快速的开发出一个披萨店以及订购披萨的逻辑 public Pizza OrderPizza() { Pizza pizza = new Pizza(); pizza

静态工厂 + DbHelper

在 .NET 的学习过程中用过三种数据库:Sql Server.Access.SQLite.Sql Server 用得相对多一点点,但是,麻烦,每次用它都需要开服务,而且还费资源,更麻烦的是拷贝到一台没有装SqlServer的电脑上还不能用,所以一般练习中只要不涉及到什么存储过程这些也基本不用它.Access简单的文件型数据库,office的套件,基本的SQL语句也支持,在一般的小型应用系统中用起来还行,而且在Windows 7开始操作系统中就已经内置了Access的服务,随便拷贝.SQLite