设计模式学习笔记之工厂模式

原创 2016年05月30日 22:50:49

工厂模式?

工厂模式有多种,如果概括的想,可以将抽象工厂也算作工厂模式。主要由简单工厂模式,和有所区分的工厂方法模式和抽象工厂模式。

简单工厂模式

即将对象的创建交给工厂来完成,由工厂来完成具体的对象创建的操作。这样的所谓简单工厂模式,其实严格来说并不是一种设计模式,而只是一种编程习惯。

class Square:

    def draw(self):
        print "drawing a square"


class Triangle:

    def draw(self):
        print "drawing a triangle"


class ShapeFactory(object):

    @classmethod
    def createShape(self, shape):
        return {
            'square': Square(),
            'triangle': Triangle()
        }[shape]


if __name__ == "__main__":
    square = ShapeFactory.createShape("square")
    square.draw()

    triangle = ShapeFactory.createShape("triangle")
    triangle.draw()

工厂方法模式

定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
说明:工厂方法模式用来处理对象的创建,让子类来决定创建的对象是什么,于是将创建对象的过程封装。
也就是说,现在我们依然是用工厂来创建对象,但是这个工厂不是具体的,而是一个抽象的工厂,子类实现这个抽象的工厂,所以不同的子类就可以得到不同的工厂,所以相当于把具体实例化的过程推迟到子类,因为不同的工厂得到不同的产品。(在python中因为没有接口的概念,虽然可以用一些模块来代替,但是从语言本身来说,这样做并不是必须的,所以直接得到多个工厂即可,似乎对这个模式并不是很强调)

抽象工厂模式

定义:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类
说明:其实抽象工厂模式常常会运用到工厂方法模式,主要是用来处理关于具体工厂的问题。但是抽象工厂模式并不是工厂方法模式,抽象工厂模式主要是采用抽象的工厂来将工厂组合起来,不需要考虑的具体的工厂类型,java中,用抽象的工厂来先定义需要的几种具体工厂,但是实际上具体工厂的实现是由实现了抽象工厂的具体工厂来实现的(这里用到了工厂方法模式),于是就将几种工厂组合在了一起。
python的示例:

class Dog(object):

    def speak(self):
        return "woof"

    def __str__(self):
        return "Dog"


class Cat(object):

    def speak(self):
        return "meow"

    def __str__(self):
        return "Cat"


class CatFactory(object):

    @property
    def pet(self):
        return Cat()

    @property
    def food(self):
        return "cat food"


class DogFactory(object):

    @property
    def pet(self):
        return Dog()

    @property
    def food(self):
        return "dog food"


class PetShop(object):

    def __init__(self, animal_factory=None):
        self._pet_factory = animal_factory

    def show_pet(self):
        pet = self._pet_factory.pet
        print("we have a {}".format(pet))
        print("It says {}".format(pet.speak()))
        print("And we have {}".format(self._pet_factory.food))


if __name__ == "__main__":
    shop = PetShop(DogFactory())
    shop.show_pet()

    another_shop = PetShop(CatFactory())
    another_shop.show_pet()

这里的petshop就相当于一个抽象工厂了,将两种工厂组合在一起。

版权声明:转载请保留出处

大话设计模式-简单工厂模式(学习笔记与java实现)

java学习了一段时间,对面向对象有一定的理解,但是总觉得理解不深,这几天开始看设计模式,用的是程杰的大话设计模式,但是书里的源码是C#的,自己用java来实现,也加深了java的学习。 1、简单工...

设计模式学习笔记--抽象工厂模式

纠结了好几天,总算是搞懂了点抽象工厂和工厂方法模式的一些区别了。 两篇很好的文章: http://blog.csdn.net/superbeck/article/details/4446177 ...

Java学习笔记 - 设计模式(一)工厂模式

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于...
  • tusijis
  • tusijis
  • 2016年09月12日 17:02
  • 85

C#设计模式学习笔记(一) 之 简单工厂模式

这是一个关于记录我学习(C#)设计模式的系列笔记,主要是记录一些知识点,和一些个人的理解。 如果真能帮助到大家的话,哪怕是一点点,我也是很开心的啦。 PS:由于本人第一次写博客,所以我写得可能会很...

学习笔记——JAVA设计模式<2>工厂模式

工厂模式 实现了创建者和调用者的分离 详细分类 简单工厂模式 工厂方法模式 抽象工厂模式 面向对象设计的基本原则 ...

java 设计模式 学习笔记(3) 抽象工厂模式

抽象工厂模式 : 提供一个创建一系列相关的或相互依赖对象的接口,而无需指定它们具体的类。  1. 在这个设计模式中,有抽象工厂接口, AbstracFactory Class  。这个接口有两个方法,...
  • veverrr
  • veverrr
  • 2011年04月14日 21:33
  • 447

设计模式学习笔记---工厂模式(Java版)

详细分类 一、简单工厂模式 二、工厂方法模式 三、抽象工厂模式 一、简单工厂模式 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无...

C++设计模式学习笔记一:简单工厂模式

最近在看《大话设计模式》

Head First设计模式学习笔记-------(4.1)工厂模式

这一章将给大家带来一个有趣的模式------工厂模式 开始先给大家看一个简单的例子: 如果按照上面的设计方式,那么当你需要修改比萨类型时,就需要修改这个文件的代码了,但是你发现,下...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式学习笔记之工厂模式
举报原因:
原因补充:

(最多只允许输入30个字)