Python设计模式之抽象工厂模式


Posted in Python onAugust 25, 2016

python面向对象编程入门,我们需要不断学习进步

"""抽象工厂模式的实现"""

import random


class PetShop:

  """宠物商店"""

  def __init__(self, animal_factory=None):

    """宠物工厂是我们的抽象工厂。我们可以随意设置。""" 
    self.pet_factory = animal_factory

  def show_pet(self):

    """使用抽象工厂创建并显示一个宠物"""

    pet = self.pet_factory.get_pet()
    print("我们有一个可爱的 {}".format(pet))
    print("它说 {}".format(pet.speak()))
    print("我们还有 {}".format(self.pet_factory.get_food()))


# 工厂生产的事物

class Dog:

  def speak(self):
    return "汪"

  def __str__(self):
    return "Dog"


class Cat:

  def speak(self):
    return "喵"

  def __str__(self):
    return "Cat"


# Factory classes

class DogFactory:

  def get_pet(self):
    return Dog()

  def get_food(self):
    return "狗食"


class CatFactory:

  def get_pet(self):
    return Cat()

  def get_food(self):
    return "猫粮"


# 随机创建合适的工厂
def get_factory():
  """让我们动起来!"""
  return random.choice([DogFactory, CatFactory])()


# 多个工厂显示宠物
if __name__ == "__main__":
  for i in range(4):
    shop = PetShop(get_factory())
    shop.show_pet()
    print("=" * 20)

结果如图:

Python设计模式之抽象工厂模式

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
举例讲解Python中字典的合并值相加与异或对比
Jun 04 Python
Python用户推荐系统曼哈顿算法实现完整代码
Dec 01 Python
python tensorflow学习之识别单张图片的实现的示例
Feb 09 Python
Python多进程与服务器并发原理及用法实例分析
Aug 21 Python
python url 参数修改方法
Dec 26 Python
python爬虫中多线程的使用详解
Sep 23 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 Python
Python sorted排序方法如何实现
Mar 31 Python
python实现学生成绩测评系统
Jun 22 Python
深入了解Python装饰器的高级用法
Aug 13 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
Sep 23 Python
Python如何使用ConfigParser读取配置文件
Nov 12 Python
简单谈谈python中的Queue与多进程
Aug 25 #Python
利用Python自动监控网站并发送邮件告警的方法
Aug 24 #Python
巧用python和libnmapd,提取Nmap扫描结果
Aug 23 #Python
Python中属性和描述符的正确使用
Aug 23 #Python
Python实现基本线性数据结构
Aug 22 #Python
Python进行数据提取的方法总结
Aug 22 #Python
详解Python实现按任意键继续/退出的功能
Aug 19 #Python
You might like
一个简单的php实现的MySQL数据浏览器
2007/03/11 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
jQuery ul标签下拉菜单演示代码
2010/12/11 Javascript
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
2011/07/08 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
js取得url地址参数实例
2013/02/22 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
jQuery+正则+文本框只能输入数字的实现方法
2016/10/07 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
通过实例了解Render Props回调地狱解决方案
2020/11/04 Javascript
python统计cpu利用率的方法
2015/06/02 Python
python简单分割文件的方法
2015/07/30 Python
Python中创建字典的几种方法总结(推荐)
2017/04/27 Python
python接口自动化之ConfigParser配置文件的使用详解
2020/08/03 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
美国汽车交易网站:Edmunds
2016/08/17 全球购物
为数据库创建索引都需要注意些什么
2012/07/17 面试题
2014新课程改革心得体会
2014/03/10 职场文书
政府四风问题整改措施
2014/10/04 职场文书
慈善募捐倡议书
2015/04/27 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
在Windows下安装配置CPU版的PyTorch的方法
2021/04/02 Python
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android