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语言技巧之三元运算符使用介绍
Mar 04 Python
python中ConfigParse模块的用法
Sep 29 Python
python动态网页批量爬取
Feb 14 Python
Python中time模块和datetime模块的用法示例
Feb 28 Python
在Python的Flask中使用WTForms表单框架的基础教程
Jun 07 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
Python常见异常分类与处理方法
Jun 04 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
Python 处理文件的几种方式
Aug 23 Python
适合Python初学者的一些编程技巧
Feb 12 Python
matplotlib grid()设置网格线外观的实现
Feb 22 Python
pytest进阶教程之fixture函数详解
Mar 29 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原理的opcodes(操作码)
2010/10/26 PHP
PHP手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
php遍历CSV类实例
2015/04/14 PHP
php实现评论回复删除功能
2017/05/23 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
2010/01/22 Javascript
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
Angular ElementRef简介及其使用
2018/10/01 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
Vue.js实现tab切换效果
2019/07/24 Javascript
Vue数据绑定实例写法
2019/08/06 Javascript
Python中用format函数格式化字符串的用法
2015/04/08 Python
Python写入数据到MP3文件中的方法
2015/07/10 Python
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
选择python进行数据分析的理由和优势
2019/06/25 Python
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
端午节演讲稿
2014/05/23 职场文书
降价通知函
2015/04/23 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
如何书写邀请函?
2019/06/24 职场文书
详解Java实践之建造者模式
2021/06/18 Java/Android
vue中data里面的数据相互使用方式
2022/06/05 Vue.js
关于Redis的主从复制及哨兵问题
2022/06/16 Redis
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS