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

原创 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就相当于一个抽象工厂了,将两种工厂组合在一起。

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

相关文章推荐

设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)

抽象工厂,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。对于工厂方法来说,抽象工厂可实现一系列产品的生产,抽象工厂更注重产品的组合。 看代码: 7.1.解释 main(...

java设计模式学习笔记之计算器中的简单工厂模式

java设计模式学习笔记之计算器中的简单工厂模式 最近在重温设计模式,偶然看到程杰的《大话设计模式》写的非常不错、通俗易懂,之后的一系列都是学习的笔记,仅此记录。 一、情景回放:某校大二软件工程专...

java设计模式学习笔记-工厂模式

该模式有4个成员:抽象工厂接口、工厂实现类、抽象产品接口、产品实现类 抽象工厂接口 package model02.factory; /** * 工厂类接口 */ public interf...

[学习笔记]设计模式[3]-{工厂模式}

设计原则要依赖抽象,不要依赖具体类这条原则有一个正式的名字:“依赖倒置原则”。这个原则的含义是:不要让高层的组件去依赖低层的组件,而且,这些组件,都应该是依赖于某一个抽象。设计模式工厂模式工厂方法模式...

十一、抽象工厂模式——设计模式学习笔记

抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

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

所谓简单工厂模式,即提供创建对象的接口,而具体创建什么对象,由客户端决定。 比如,我们有IBird这样一个抽象类,有Chicken和Duck这两个类实现IBird。那么,如果我们想灵活的创建Chic...

Head First设计模式学习笔记-------(4.2)抽象工厂模式

在上一章我们讲了工厂模式中的一种,工厂方法模式。这一章我们将要说另外一种模式,那就是抽象工厂模式。 刚开始先给大家介绍一种新的设计原则:要依赖抽象,不要依赖具体类。 这个设计原则还有自己的名字--...

设计模式学习笔记二:简单工厂模式

简单工厂模式含义:百度百科

java设计模式学习笔记--简单工厂模式

1. 什么是简单工厂模式简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。但是严格来说,简单...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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