参考链接: 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中的实现相关推荐

  1. java与模式孙悟空_悟空模式-java-工厂方法模式

    [却说那七衣仙女自受了大圣的定身法术,一周天方能解脱,各提花篮,回奏王母说道:"齐天大圣使术法困住我等,故此来迟."王母问道:"汝等摘了多少蟠桃?"仙女道:&q ...

  2. [转载] pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...

    参考链接: 使用Pandas在Python中读写CSV文件 前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Pyth ...

  3. pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...

    前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Python中读写CSV文件.有几种不同的方法,例如,您可以使用Py ...

  4. java工厂方法模式_java-工厂方法模式的优势

    从wiki开始, 工厂方法设计模式解决了以下问题: >如何创建对象,以便子类可以重新定义要实例化的类? >类如何将实例化延迟到子类? 例如,MazeGame提供了实例化功能来像MagicM ...

  5. python模板模式_python-模板方法模式

    说明: 模板方法模式时行为模式中比较简单的设计模式之一.模板方法关注这样的一类行为:该类行为在执行过程中拥有大致相同的动作次序,只是动作在实现的具体细节上有所差异.例如:泡茶和泡咖啡,泡茶:把水煮沸, ...

  6. 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)

    一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...

  7. python中__init__方法_关于python中__init__方法理解

    在理解__init__方法之前,我们需要搞明白,什么时候才需要用到的这个方法 什么是__init__? __init__方法在python中是类的初始化,通俗来讲,就是每次只要你去创建一个类的实例对象 ...

  8. python运行方法_对python中执行DOS命令的3种方法总结

    1. 使用os.system("cmd") 特点是执行的时候程序会打出cmd在Linux上执行的信息. import os os.system("ls") 2. ...

  9. 这12种方法轻松合并Python中的列表

    我喜欢12这个数字,因为有太多的事情与12有关.一年有12个月;古代用12个时辰(地支)表示一天的时间.用一纪表示12年;希腊有12主神;黄道有12宫;撒迦利亚.西琴先生的<地球编年史>中 ...

  10. linux列表中添加多个元素,这12种方法轻松合并Python中的列表

    导读 我喜欢12这个数字,因为有太多的事情与12有关.一年有12个月;古代用12个时辰(地支)表示一天的时间.用一纪表示12年;希腊有12主神;黄道有12宫;撒迦利亚.西琴先生的<地球编年史&g ...

最新文章

  1. WCF入门(一)——简单的示例
  2. Android高效加载大图、多图解决方案,有效避免程序OOM
  3. (pytorch-深度学习系列)pytorch卷积层与池化层输出的尺寸的计算公式详解
  4. Linux VI编辑器
  5. JBPM4.4_jBPM4.4应用(与Spring集成自行控制事务等)
  6. OpenCV与相机的关系
  7. 网站制作之按钮onclick大全
  8. Struts2-值栈的定义
  9. leveldb 学习。
  10. Master公式(计算递归复杂度)
  11. 深度学习之tensorflow (一) XORerr1 -修改
  12. 现代软件工程课件 需求分析 如何提出靠谱的项目建议 NABCD
  13. 分享 | 开源的中文语音识别系统
  14. 【2021牛客暑期多校训练营7】xay loves trees(dfs序,维护根出发的链)
  15. SQL Server临界点游戏——为什么非聚集索引被忽略!
  16. wps打开pdf乱码_wps pdf转换成word乱码
  17. VTD场景搭建指南-搭建一个最简单的场景
  18. DTCC 2018大会归来
  19. 【知识点总结】电路原理 第一讲
  20. Spring容器中的Bean是否会被GC呢?

热门文章

  1. 【CCCC】L2-013 红色警报 (25分),,并查集计算集合个数
  2. 【CSP201312-3】最大的矩形,单调栈
  3. 【PAT乙】1069 微博转发抽奖 (20分) set
  4. NYOJ1 - A+B Problem
  5. 计算机网络八校联考试题,2019届高三信息技术3月联考试卷有解析与答案
  6. php为什么要创建类,php – 是否有理由为单一功能创建类?
  7. php mysql表单源码_PHP表单数据写入MySQL数据库的代码
  8. 第五章 Windows基础控件
  9. Easy Summation 假的自然数幂的和
  10. 2013年C++A:买不到的数目(互质数)