[转载] 简单工厂模式和工厂方法模式在Python中的实现
参考链接: Python中的工厂方法设计模式
简单工厂模式
class Book(object):
def __init__(self,name, price):
self.name = name
self.price = price
def read(self):
print("Book name is {name}, Book's price is {price}".format(name=self.name,price=self.price))
class JavaBook(Book):
def __init__(self,name,price,lang="java"):
super(JavaBook,self).__init__(name,price)
self.lang = lang
def read(self):
super(JavaBook,self).read()
print("Book is written by {lang}".format(lang=self.lang))
class PythonBook(Book):
def __init__(self,name,price,lang="python"):
super(PythonBook,self).__init__(name,price)
self.lang = lang
def read(self):
super(PythonBook,self).read()
print("Book is written by {lang}".format(lang=self.lang))
class BookSimpleFactory(object):
def __init__(self):
pass
def getBook(self,name, price, lang=""):
if lang == "python":
return PythonBook(name, price)
elif lang == "java":
return JavaBook(name,price)
else:
return Book(name,price)
if __name__ == "__main__":
bookfactory = BookSimpleFactory()
book1 = bookfactory.getBook("11-python", "25", "python")
book1.read()
book2 = bookfactory.getBook("12-python", "99", "python")
book2.read()
book3 = bookfactory.getBook("21-java", "46", "java")
book3.read()
book4 = bookfactory.getBook("31-english", "199")
book4.read()
执行一下
C:\Python27\python.exe E:/python-codes/factory-pattern/FactoryPatternSample.py
Book name is 11-python, Book's price is 25
Book is written by python
Book name is 12-python, Book's price is 99
Book is written by python
Book name is 21-java, Book's price is 46
Book is written by java
Book name is 31-english, Book's price is 199
Process finished with exit code 0
工厂方法模式
import abc
import random
class Book(object):
def __init__(self,name, price):
self.name = name
self.price = price
self.publisher = None
def read(self):
print("Book name is {name}, Book's price is {price}".format(name=self.name,price=self.price))
if self.publisher:
print("Book: {name} is published by {publisher} ".format(name = self.name, publisher = self.publisher))
def setpublisher(self, publisher):
self.publisher = publisher
class JavaBook(Book):
def __init__(self,name,price,lang="java"):
super(JavaBook,self).__init__(name,price)
self.lang = lang
def read(self):
super(JavaBook,self).read()
print("Book:{name} is written by {lang}".format(name = self.name, lang=self.lang))
class PythonBook(Book):
def __init__(self,name,price,lang="python"):
super(PythonBook,self).__init__(name,price)
self.lang = lang
def read(self):
super(PythonBook,self).read()
print("Book is written by {lang}".format(lang=self.lang))
class AbstractBookFactory(object):
def __init__(self):
pass
@abc.abstractmethod
def getBook(self, lang):
pass
class IndustryBookFactory(AbstractBookFactory):
def __init__(self):
super(IndustryBookFactory, self).__init__()
def getBook(self, lang):
if lang == "python":
book = PythonBook("Python-book-%s" % (int(10*(random.random()))), int(100*random.random()))
elif lang == "java":
book = JavaBook("Java-book-%s" % (int(10*(random.random()))), int(100*random.random()))
else:
book = Book("Another-book-%s" % (int(10*(random.random()))), int(100*random.random()))
book.setpublisher("IndustryPubish")
return book
class PeopleBookFactory(AbstractBookFactory):
def __init__(self):
super(PeopleBookFactory, self).__init__()
def getBook(self, lang):
if lang == "python":
book = PythonBook("Python-book-%s" % (int(100*(random.random()))), int(100*random.random()))
elif lang == "java":
book = JavaBook("Java-book-%s" % (int(100*(random.random()))), int(100*random.random()))
else:
book = Book("Another-book-%s" % (int(100*(random.random()))), int(100*random.random()))
book.setpublisher("PeoplePubish")
return book
if __name__ == "__main__":
peoplebookfact = PeopleBookFactory()
book1 = peoplebookfact.getBook("python")
book1.read()
print("-"*20)
book2 = peoplebookfact.getBook("java")
book2.read()
print("-"*20)
book3 = peoplebookfact.getBook("hahah")
book3.read()
print("-"*20)
industrybookfactory = IndustryBookFactory()
book11 = industrybookfactory.getBook("python")
book11.read()
print("-"*20)
book21 = industrybookfactory.getBook("java")
book21.read()
print("-"*20)
book31 = industrybookfactory.getBook("hahah")
book31.read()
print("-"*20)
执行一下:
C:\Python27\python.exe D:/代码/python-DP/FactoryMethodSample.py
Book name is Python-book-99, Book's price is 3
Book: Python-book-99 is published by PeoplePubish
Book is written by python
--------------------
Book name is Java-book-46, Book's price is 81
Book: Java-book-46 is published by PeoplePubish
Book:Java-book-46 is written by java
--------------------
Book name is Another-book-4, Book's price is 43
Book: Another-book-4 is published by PeoplePubish
--------------------
Book name is Python-book-2, Book's price is 5
Book: Python-book-2 is published by IndustryPubish
Book is written by python
--------------------
Book name is Java-book-4, Book's price is 92
Book: Java-book-4 is published by IndustryPubish
Book:Java-book-4 is written by java
--------------------
Book name is Another-book-2, Book's price is 96
Book: Another-book-2 is published by IndustryPubish
--------------------
Process finished with exit code 0
[转载] 简单工厂模式和工厂方法模式在Python中的实现相关推荐
- java与模式孙悟空_悟空模式-java-工厂方法模式
[却说那七衣仙女自受了大圣的定身法术,一周天方能解脱,各提花篮,回奏王母说道:"齐天大圣使术法困住我等,故此来迟."王母问道:"汝等摘了多少蟠桃?"仙女道:&q ...
- [转载] pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...
参考链接: 使用Pandas在Python中读写CSV文件 前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Pyth ...
- pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...
前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Python中读写CSV文件.有几种不同的方法,例如,您可以使用Py ...
- java工厂方法模式_java-工厂方法模式的优势
从wiki开始, 工厂方法设计模式解决了以下问题: >如何创建对象,以便子类可以重新定义要实例化的类? >类如何将实例化延迟到子类? 例如,MazeGame提供了实例化功能来像MagicM ...
- python模板模式_python-模板方法模式
说明: 模板方法模式时行为模式中比较简单的设计模式之一.模板方法关注这样的一类行为:该类行为在执行过程中拥有大致相同的动作次序,只是动作在实现的具体细节上有所差异.例如:泡茶和泡咖啡,泡茶:把水煮沸, ...
- 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)
一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...
- python中__init__方法_关于python中__init__方法理解
在理解__init__方法之前,我们需要搞明白,什么时候才需要用到的这个方法 什么是__init__? __init__方法在python中是类的初始化,通俗来讲,就是每次只要你去创建一个类的实例对象 ...
- python运行方法_对python中执行DOS命令的3种方法总结
1. 使用os.system("cmd") 特点是执行的时候程序会打出cmd在Linux上执行的信息. import os os.system("ls") 2. ...
- 这12种方法轻松合并Python中的列表
我喜欢12这个数字,因为有太多的事情与12有关.一年有12个月;古代用12个时辰(地支)表示一天的时间.用一纪表示12年;希腊有12主神;黄道有12宫;撒迦利亚.西琴先生的<地球编年史>中 ...
- linux列表中添加多个元素,这12种方法轻松合并Python中的列表
导读 我喜欢12这个数字,因为有太多的事情与12有关.一年有12个月;古代用12个时辰(地支)表示一天的时间.用一纪表示12年;希腊有12主神;黄道有12宫;撒迦利亚.西琴先生的<地球编年史&g ...
最新文章
- WCF入门(一)——简单的示例
- Android高效加载大图、多图解决方案,有效避免程序OOM
- (pytorch-深度学习系列)pytorch卷积层与池化层输出的尺寸的计算公式详解
- Linux VI编辑器
- JBPM4.4_jBPM4.4应用(与Spring集成自行控制事务等)
- OpenCV与相机的关系
- 网站制作之按钮onclick大全
- Struts2-值栈的定义
- leveldb 学习。
- Master公式(计算递归复杂度)
- 深度学习之tensorflow (一) XORerr1 -修改
- 现代软件工程课件 需求分析 如何提出靠谱的项目建议 NABCD
- 分享 | 开源的中文语音识别系统
- 【2021牛客暑期多校训练营7】xay loves trees(dfs序,维护根出发的链)
- SQL Server临界点游戏——为什么非聚集索引被忽略!
- wps打开pdf乱码_wps pdf转换成word乱码
- VTD场景搭建指南-搭建一个最简单的场景
- DTCC 2018大会归来
- 【知识点总结】电路原理 第一讲
- Spring容器中的Bean是否会被GC呢?
热门文章
- 【CCCC】L2-013 红色警报 (25分),,并查集计算集合个数
- 【CSP201312-3】最大的矩形,单调栈
- 【PAT乙】1069 微博转发抽奖 (20分) set
- NYOJ1 - A+B Problem
- 计算机网络八校联考试题,2019届高三信息技术3月联考试卷有解析与答案
- php为什么要创建类,php – 是否有理由为单一功能创建类?
- php mysql表单源码_PHP表单数据写入MySQL数据库的代码
- 第五章 Windows基础控件
- Easy Summation 假的自然数幂的和
- 2013年C++A:买不到的数目(互质数)