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修改Excel数据的实例代码
Nov 01 Python
python中sets模块的用法实例
Sep 30 Python
在Django的URLconf中进行函数导入的方法
Jul 18 Python
使用pandas对两个dataframe进行join的实例
Jun 08 Python
Python面向对象之接口、抽象类与多态详解
Aug 27 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
简单了解Pandas缺失值处理方法
Nov 16 Python
Python requests设置代理的方法步骤
Feb 23 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
Mar 11 Python
用Python提取PDF表格的方法
Apr 11 Python
Django框架中视图的用法
Jun 10 Python
python数字图像处理数据类型及颜色空间转换
Jun 28 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的memory_limit限制的方法分享
2012/02/21 PHP
浅析PHP文件下载原理
2014/12/25 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
IE和Firefox下event事件杂谈
2009/12/18 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
2017/09/12 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
node中modules.exports与exports导出的区别
2018/06/08 Javascript
JS 实现获取验证码 倒计时功能
2018/10/29 Javascript
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
Python tkinter的grid布局及Text动态显示方法
2018/10/11 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
2019/08/10 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
python读取与处理netcdf数据方式
2020/02/14 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
python os.listdir()乱码解决方案
2021/01/31 Python
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
Ruby如何定义一个类
2012/10/08 面试题
大学生自我评价怎样写好
2013/10/23 职场文书
保险专业大专生求职信
2013/10/26 职场文书
护士专业推荐信
2013/11/02 职场文书
总经理岗位职责描述
2014/02/08 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
八年级上册语文教学计划
2015/01/22 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
vue实现列表垂直无缝滚动
2022/04/08 Vue.js