一起来学设计模式-----创建型模式之工厂方法

工厂方法模式,在简单工厂上再深一层,简单工厂里有一个弊端,就是在方法里是根据用户的输入直接返回子类对象。在工厂方法里,定义了一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使得一个类的实例化延迟到了子类。

以之前的操作运算为例,使用工厂方法代码如下:

from abc import ABCMeta, abstractmethod

class BaseOperation:
    def GetResult(self,a,b):
        result = 0
        return result

class OperationAdd(BaseOperation):
    def __int__(self,a,b):
        self.a = a
        self.b = b

    def GetResult(self,a,b):
        result = 0
        result = a + b
        return result

class OperationSub(BaseOperation):
    def __int__(self,a,b):
        self.a = a
        self.b = b

    def GetResult(self,a,b):
        result = 0
        result = a - b
        return result

class OperationMul(BaseOperation):
    def GetResult(self,a,b):
        result = 0
        result = a * b
        return result

class OperationDiv(BaseOperation):
    def GetResult(self,a,b):
        result = 0
        if b == 0 :
            raise ValueError("no 0 !")
        result = a/b
        return result

class IFactory:
    @abstractmethod
    def  CreateOperation(self):
        pass

class AddFactory(IFactory):
    def CreateOperation(self):
        return OperationAdd()

class SubFactory(IFactory):
    def CreateOperation(self):
        return OperationSub()

class MulFactory(IFactory):
    def CreateOperation(self):
        return OperationMul()

class DivFactory(IFactory):
    def CreateOperation(self):
        return OperationDiv()

def main():
    operFactory = AddFactory()
    oper = operFactory.CreateOperation()
    print oper.GetResult(2,4)

if __name__ == ‘__main__‘:
    main()

客户端在使用时,需要决定由于哪一个工厂来实例化类,每个类都有自己的工厂,选择好工厂,就能实例化得到这个工程所有的类。此时如果需要增加一个运行操作,完全不需要修改其他的业务逻辑,增加运算类和自己的工厂即可。UML类图如下所示

  

对比两个模式下的UML图,很快就能发现不同,简单的工厂在服务端有个方法,用于接收客户端的参数,从而实例化不同的对象,客户端只关心传入自己的参数,获取想要的对象即可。而工厂方法没有这个函数,客户端需要清楚知道自己要使用哪一个工厂。增加一个运算类时, 简单工厂是修改工厂类,而工厂方法是需要修改工厂类的,而工厂方法需要修改客户端

时间: 2024-12-26 11:43:45

一起来学设计模式-----创建型模式之工厂方法的相关文章

设计模式——创建型模式之工厂方法模式(三)

模式的定义与特点 工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中.这满足创建型模式中所要求的“创建与使用相分离”的特点. 我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”.如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背“开闭原则”. 本节介绍的“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以

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

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

创建型模式:工厂方法

文章首发创建型模式:工厂方法 简介 姓名:工厂方法 英文名:Factory method Pattern 价值观:扩展是我的专属 个人介绍: Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to subclasses. (定义一个用于创建对象的接口,让子类决定

一起来学设计模式-----创建型模式之简单工厂

一直都特别想整体学习下设计模式,之前总觉得不是时候,觉得基础不够好怕吸收不了,或者体会不到设计模式带来的便利.就在上半年的KPI编写测试桩项目中,我就深刻的感受到设计模式带来的好处.一般测试人员写的代码不是很多,很多时候写代码也都是基于解决问题的逻辑来的,写的代码面向过程思路较多,因此代码的冗余度特别大.在编写一个大的测试工具时,就更应该考虑这方面的问题自己是否存在.刻不容缓的学习起了设计模式,整理就从创建型模式的工厂模式开始入手吧. 创建型模式,共三种:工厂方法模式.建造者模式.原型模式.其中

4、设计模式-创建型模式-抽象工厂模式

抽象工厂模式 产品等级结构和产品族 工厂方法模式中具体工厂负责生产具体的产品 每一个具体工厂对应一种具体的产品 工厂方法具有唯一性 一般情况下:一个具体工厂中只有一个或一组重载的工厂方法 有时候希望一个一个工厂可以提供多个产品对象 而不是单一的产品对象 产品等级结构: 产品等级结构即产品的继承结构,如一个抽象类是电视机 子类有海尔电视机.海信电视机等 抽象电视机与具体与具体品牌的电视机之间构成了一个产品等级结构 抽象电视机是父类,具体品牌的电视机是其子类 产品族: 在抽象工厂模式中 产品族是指由

创建型模式之工厂方法

工厂方法模式(Factory Method Pattern)又叫虚拟构造函数(Virtual Constructor)模式或多态性工厂(Polymorphic Factory)模式.工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建性工作推迟到子类中. 工厂模式又分为简单工厂.工厂方法和抽象工厂模式. 工厂方法模式,英文原话为:Define an interface for creating an object, but let subclasses decide which cla

一起来学设计模式-----创建型模式之抽象工厂

学习了简单工厂,工厂方法模式,那什么是抽象工厂呢?工厂方法模式是在超类(IFactory)中定义一个工厂的抽象接口(CreateOperation),然后由子类负责创建具体对象:而抽象工厂则是维护一个产品家族,由子类定义产品被产生的方法,客户根据超类的接口开发.目前简单的理解,抽象工厂更多的就是基于多种产品的抽象和对象的创建. 假设系统里有一个用户表,需求是插入和选择用户时根据用户的需求,可以保存在mysql 数据库或者Access数据库中,这时用工厂方法模式应该怎么样实现呢? 首先使用面向对象

java设计模式--创建型模式--抽象工厂

什么是抽象工厂,再次学习. 1 抽象工厂 2 概述 3 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 4 5 适用性 6 1.一个系统要独立于它的产品的创建.组合和表示时. 7 8 2.一个系统要由多个产品系列中的一个来配置时. 9 10 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时. 11 12 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时. 13 参与者 14 1.AbstractFactory 15 声明一个创建抽象产品对象的操作接口.

java设计模式--创建型模式

2016-04-24 10:10:34 创建型模式:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式 注意:工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory)  这三种模式从上到下逐步抽象,并且更具一般性.GOF在<设计模式>一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory).将简单工厂模式