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 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
利用Python的Django框架生成PDF文件的教程
Jul 22 Python
对Python中9种生成新对象的方法总结
May 23 Python
python实现寻找最长回文子序列的方法
Jun 02 Python
Python2和Python3.6环境解决共存问题
Nov 09 Python
python实现生成字符串大小写字母和数字的各种组合
Jan 01 Python
python二进制文件的转译详解
Jul 03 Python
python开头的coding设置方法
Aug 08 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
Sep 06 Python
基于python实现把json数据转换成Excel表格
May 07 Python
keras实现图像预处理并生成一个generator的案例
Jun 17 Python
Pycharm 2020.1 版配置优化的详细教程
Aug 07 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 程序员应该使用的10个组件
2009/10/31 PHP
提升PHP性能的21种方法介绍
2013/06/25 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
一个小型js框架myJSFrame附API使用帮助
2008/06/28 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
详解webpack + react + react-router 如何实现懒加载
2017/11/20 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
Python基础篇之初识Python必看攻略
2016/06/23 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
Django csrf 验证问题的实现
2018/10/09 Python
python2和python3的输入和输出区别介绍
2018/11/20 Python
详解Python yaml模块
2020/09/23 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
历史学专业个人的自我评价
2013/10/13 职场文书
买卖车协议书
2014/04/21 职场文书
常务副总经理任命书
2014/06/05 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
仓库管理制度范本
2015/08/04 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
Python趣味挑战之实现简易版音乐播放器
2021/05/28 Python
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
MySQL 5.7常见数据类型
2021/07/15 MySQL