PYTHON设计模式,创建型之工厂方法模式

我感觉和上一个差不多,可能不要动最要的地方吧。。。

 

#!/usr/bin/evn python
#coding:utf8

class Pizza(object):
    def prepare(self, type):
        print 'prepare {type} pizza'.format(type=type)

    def bake(self, type):
        print 'bake {type} pizza'.format(type=type)

    def cut(self, type):
        print 'cut {type} pizza'.format(type=type)

    def box(self, type):
        print 'box {type} pizza'.format(type=type)

class CheesePizza(Pizza):
    def __init__(self):
        self.name = "cheese pizza"

class ClamPizza(Pizza):
    def __init__(self):
        self.name = "clam pizza"

class VeggiePizza(Pizza):
    def __init__(self):
        self.name = "viggie pizza"

class PizzaFactory(object):

    def create_pizza(self, type):
        raise NotImplementedError

    def order_pizza(self, type):
        pizza = self.create_pizza(type)
        pizza.prepare(type)
        pizza.bake(type)
        pizza.cut(type)
        pizza.box(type)
        return pizza

class PizzaStore(PizzaFactory):
    def create_pizza(self, type):
        pizza = None

        if type == "cheese":
            pizza =  CheesePizza()
        if type == "clam":
            pizza =  ClamPizza()
        if type == "veggie":
            pizza =  VeggiePizza()
        return pizza

if __name__ == '__main__':
    store = PizzaStore()
    pizza = store.order_pizza('cheese')
    print pizza.name
    store = PizzaStore()
    pizza = store.order_pizza('clam')
    print pizza.name
    store = PizzaStore()
    pizza = store.order_pizza('veggie')
    print pizza.name

 

时间: 2024-11-30 07:48:12

PYTHON设计模式,创建型之工厂方法模式的相关文章

Java技术_每天掌握一种设计模式(003)_使用场景及简单实例(创建型:工厂方法)

Java技术_每天掌握一种设计模式(001)_设计模式概念及分类 Java技术_每天掌握一种设计模式(002)_使用场景及简单实例(创建型:单例模式) Java技术_每天掌握一种设计模式(003)_使用场景及简单实例(创建型:工厂方法) Java技术_每天掌握一种设计模式(004)_使用场景及简单实例(创建型:抽象工厂) Java技术_每天掌握一种设计模式(005)_使用场景及简单实例(创建型:建造模式) Java技术_每天掌握一种设计模式(006)_使用场景及简单实例(创建型:原型模式) 1.

Java设计模式编程中的工厂方法模式和抽象工厂模式_java

工厂方法模式 动机 创建一个对象往往需要复杂的过程,所以不适合包含在一个复合工厂中,当有新的产品时,需要修改这个复合的工厂,不利于扩展. 而且,有些对象的创建可以需要用到复合工厂访问不到的信息,所以,定义一个工厂接口,通过实现这个接口来决定实例化那个产品,这就是工厂方法模式,让类的实例化推迟到子类中进行. 目的 1. 定义一个接口,让子类决定实例化哪个产品. 2. 通过通用接口创建对象. 实现 1. 产品接口和具体产品很好理解. 2. 工厂类提供一个工厂方法,返回一个产品对象.但是这个工厂方法是

设计模式详解之工厂方法模式

工厂方法模式(Factory Method)分为3种: 1.普通工厂模式 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.首先看下关系图: 我们以一个例子来讲解:发送短信和发送邮件(具有共同的接口:发送) 接口: public interface Sender { /* * 发送邮件或者短消息的共同接口 */ public void sender(); } 实现类: /* * 发送邮件的实现类 */ public class MailSender implements Sender

Ruby中使用设计模式中的简单工厂模式和工厂方法模式_ruby专题

之前有看过<ruby设计模式>,不过渐渐的都忘记了.现在买了一个大话设计模式,看起来不是那么枯燥,顺便将代码用ruby实现了一下. 简单工厂模式: # -*- encoding: utf-8 -*- #运算类 class Operation attr_accessor :number_a,:number_b def initialize(number_a = nil, number_b = nil) @number_a = number_a @number_b = number_b end d

Android设计模式系列之工厂方法模式_Android

工厂方法模式,往往是设计模式初学者入门的模式,的确,有人称之为最为典型最具启发效果的模式. android中用到了太多的工厂类,其中有用工厂方法模式的,当然也有很多工厂并不是使用工厂方法模式的,只是工具管理类. 今天以ThreadFactory举例说明一下简单工厂模式和工厂方法模式. 工厂方法模式,Factory Method,简单的方式,不简单的应用. 1.意图 定义一个用于创建对象的接口,让子类决定实例化哪个类.工厂方式模式使一个类的实例化延迟到其子类. 热门词汇:虚构造器 延迟 创建对象

设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)

 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 分类  工厂模式主要是为创建对象提供过渡接口,以便将创建对象的

Java使用设计模式中的工厂方法模式实例解析_java

工厂方法模式的定义工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品. 它包含了如下角色: 抽象产品(Product) 具体产品(ConcreteProduct) 抽象工厂(Factory) 具体工厂(ConcreteFactory) 模式的UML类

.NET设计模式-创建型模式专题总结(Creational Pattern)

创建型模式专题总结(Creational Pattern) --.NET设计模式系列之七 Terrylee,2006年1月 概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程.它帮助一个系统独立于如何创建.组合和表示它的那些对象.本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何使用创建型模式. 为什么需要创建型模式 所有的创建型模式都有两个永恒的主旋律:第一,它们都将系统使用哪些具体类的信息封装起来:第二,它们隐藏了这些类的实例是如何被创建和组织的.外界对于这些

设计模式的C++实现之工厂方法模式

工厂方法模式不同于简单工厂模式的地方在于工厂方法模式把对象的创建过程放到里子类里.这样工厂父对象和产品父 对象一样,可以是抽象类或者接口,只定义相应的规范或操作,不涉及具体的创建或实现细节. 其类图如下: 实例代码为: #pragma once class IProduct { public: IProduct(void); virtual ~IProduct(void); }; #pragma once #include "iproduct.h" class IPad : publi