工厂模式的python实现
#1.什么是工厂模式 #2.工厂模式的分类
'''
1. 简单工厂模式
2. 工厂方法模式
3. 抽象工厂方法模式
''' #3.简单工厂模式的python实现
from abc import ABCMeta, abstractmethod
class Animal(metaclass=ABCMeta):
@abstractmethod
def do_say(self):
pass class Dog(Animal):
def do_say(self):
print("wang wang!!") class Cat(Animal):
def do_say(self):
print("miao miao!!") ## 定义工厂
class ForestFactory(object):
def make_sound(self, object_type):
return eval(object_type)().do_say() ## client code
if __name__ == "__main__":
ff = ForestFactory()
animal = input("Which animal should make_sound Dog or Cat?")
ff.make_sound(animal) #4.工厂方法模式的python实现
from abc import ABCMeta, abstractmethod
class Section(metaclass=ABCMeta):
@abstractmethod
def describe(self):
pass class PersonSection(Section):
def describe(self):
print("personal section") class AlbumSection(Section):
def describe(self):
print("Album section") class PatentSection(Section):
def describe(self):
print("Patent section") class PublicationSection(Section):
def describe(self):
print("Publication section") # 创建一个抽象类, 并提供一个工厂方法
class Profile(metaclass=ABCMeta):
def __init__(self):
self.sections = []
self.createProfile() @abstractmethod
def createProfile(self):
pass def getSections(self):
return self.sections def addsections(self, section):
self.sections.append(section) class Zhihu(Profile):
def createProfile(self):
self.addsections(PersonSection())
self.addsections(AlbumSection())
self.addsections(PublicationSection()) class Csdn(Profile):
def createProfile(self):
self.addsections(PatentSection())
self.addsections(PersonSection()) if __name__ == '__main__':
profile_type = input("which profile you'd like to create (Zhihu or Csdn)")
profile = eval(profile_type)()
print("create profile..", type(profile).__name__)
print("Profile has sections --", profile.getSections()) #5.抽象工厂模式的python实现
from abc import ABCMeta, abstractmethod class PizzaFactory(metaclass=ABCMeta): @abstractmethod
def createVegPizza(self):
pass @abstractmethod
def createNonVegPizza(self):
pass class IndianPizzaFactory(PizzaFactory): def createVegPizza(self):
return DeluxVeggiePizza()
def createNonVegPizza(self):
return ChickenPizza() class USPizzaFactory(PizzaFactory): def createVegPizza(self):
return MexicanVegPizza()
def createNonVegPizza(self):
return HamPizza() class VegPizza(metaclass=ABCMeta): @abstractmethod
def prepare(self, VegPizza):
pass class NonVegPizza(metaclass=ABCMeta): @abstractmethod
def serve(self, VegPizza):
pass class DeluxVeggiePizza(VegPizza): def prepare(self):
print("Prepare ", type(self).__name__) class ChickenPizza(NonVegPizza): def serve(self, VegPizza):
print(type(self).__name__, " is served with Chicken on ", type(VegPizza).__name__) class MexicanVegPizza(VegPizza): def prepare(self):
print("Prepare ", type(self).__name__) class HamPizza(NonVegPizza): def serve(self, VegPizza):
print(type(self).__name__, " is served with Ham on ", type(VegPizza).__name__) class PizzaStore: def __init__(self):
pass def makePizzas(self):
for factory in [IndianPizzaFactory(), USPizzaFactory()]:
self.factory = factory
self.NonVegPizza = self.factory.createNonVegPizza()
self.VegPizza = self.factory.createVegPizza()
self.VegPizza.prepare()
self.NonVegPizza.serve(self.VegPizza) pizza = PizzaStore()
pizza.makePizzas() #6.工厂方法与抽象工厂方法的比较
# 工厂方法开发了一个创建对象的方法
# 抽象工厂方法开放了一个或者多个方法创建一个系列的相关对象
# 工厂方法使用继承和子类来决定要创建哪个对象
# 抽象共产方法使用组合将创建对象的任务委托给其他类
# 共产方法用于创建一个产品
# 抽象工厂方法用于创建相关产品的系列
#
#7.工厂模式的优缺点
'''
优点: 1.松耦合, 即对象的创建可以独立于类的实现
2.客户端无需了解创建对象的类的实现,但是依然可以创建对象
3.可以在工厂中添加其他类来创建其他类型的对象
4.工厂可以重用现有对象
'''
工厂模式的python实现的更多相关文章
- 设计模式之单例模式与工厂模式的Python实现(二)
2. 工厂模式 工厂模式是创建型设计模式的一种.核心的思想是,通过传递给类或函数某种产品的信息来创建产品并返回.当我们想得到产品a对象,只需把产品a的名字传递给工厂函数就能得到产品a对象.而核心思想的 ...
- 《大话设计模式》——简单工厂模式(Python版)
简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 例: 使用Python设计一个控制台计算器,要求输入两个数 ...
- 设计模式之单例模式与工厂模式的Python实现(一)
1. 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上 ...
- 工厂模式(python)
以字符串作为传递参数 以类名作为传递参数 来自为知笔记(Wiz)
- [python实现设计模式]-3.简单工厂模式-触宝开放平台
预备知识: 开放封闭原则(Open-Closed Principle OCP) Software entities(classes,modules,functions etc) should open ...
- 抽象工厂模式(python版)
http://blog.csdn.net/ponder008/article/details/6886039 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.优点:易 ...
- Python: 设计模式 之 工厂模式例(2)(神奇的Python)
#!/usr/bin/env python #coding=utf-8 # # 工厂模式第二例(神奇的Python) # 版权所有 2014 yao_yu (http://blog.csdn.net/ ...
- Python: 设计模式 之 工厂模式例(1)
#!/usr/bin/env python #coding=utf-8 # # 工厂模式一例 # 版权所有 2014 yao_yu (http://blog.csdn.net/yao_yu_126) ...
- python设计模式---创建型之工厂模式
# coding = utf-8 from abc import ABCMeta, abstractmethod # 简单工厂模式 class Animal(metaclass=ABCMeta): @ ...
随机推荐
- JDK框架简析--java.lang包中的基础类库、基础数据类型
题记 JDK.Java Development Kit. 我们必须先认识到,JDK不过,不过一套Java基础类库而已,是Sun公司开发的基础类库,仅此而已,JDK本身和我们自行书写总结的类库,从技术含 ...
- DBCP数据源使用
DBCP:DataBase Connection Pool 1.须要的jar:commons-dbcp.jar commons-pool.jar 2.把DBCP的配置文件(dbcpconfig.pr ...
- SpringMVC + MyBatis 配置文件
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="htt ...
- HDU3183 RMQ/贪心
A Magic Lamp Problem Description Kiki likes traveling. One day she finds a magic lamp, unfortunately ...
- P1043 数字游戏
P1043 数字游戏 题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n ...
- poj 1061(扩展欧几里得定理求不定方程)
两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特 ...
- iOS地图集成示例:百度地图POI检索
一.集成百度地图(傻瓜教程,以网站说明文档为准,此处罗列几项主要步骤) 1.登录 http://lbsyun.baidu.com 百度地图开发者平台,获取SDK和集成文档. 2.百度地图可以提供的 ...
- 棋盘问题(dfs)
http://poj.org/problem?id=1321 思路:按行搜索,回溯时还原棋盘. #include <stdio.h> #include <string.h> ] ...
- 安装robotframework-ride
先安装好python并配置好环境变量 1.Windows+r后输入CMD 安装robotframework框架 2.输入pip install robotframework 安装RIDE前需要安装的依 ...
- CRMEB系统就是集客户关系管理+营销电商系统,能够真正帮助企业基于微信公众号、小程序实现会员管理、数据分析,精准营销的电子商务管理系统。可满足企业新零售、批发、分销、等各种业务需求。
**可以快速二次开发的开源小程序商城系统源码**源码开源地址:https://github.crmeb.net/u/LXT 项目介绍: CRMEB系统就是集客户关系管理+营销电商系统,能够真正帮助企业 ...