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中使用lambda高效操作列表的教程
Apr 24 Python
python实现清屏的方法
Apr 30 Python
Python算法之图的遍历
Nov 16 Python
python selenium UI自动化解决验证码的4种方法
Jan 05 Python
python3安装speech语音模块的方法
Dec 24 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
Aug 12 Python
django restframework serializer 增加自定义字段操作
Jul 15 Python
python高级特性简介
Aug 13 Python
简述python&pytorch 随机种子的实现
Oct 07 Python
用python写PDF转换器的实现
Oct 29 Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 24 Python
python办公自动化之excel的操作
May 23 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删除非空目录的函数代码小结
2013/02/28 PHP
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
PHP $O00OO0=urldecode & eval 解密,记一次商业源码的去后门
2020/09/13 PHP
Javascript 去除数组的重复元素
2010/05/04 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
JavaScript获取文本框内选中文本的方法
2015/02/20 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
jQuery实现移动端笔触canvas电子签名
2020/05/21 jQuery
python实现爬取千万淘宝商品的方法
2015/06/30 Python
python实现分页效果
2017/10/25 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
解决pytorch 保存模型遇到的问题
2021/03/03 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
文案策划求职信
2014/04/14 职场文书
离婚财产分割协议书
2015/08/11 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL