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函数的笔记整理
Apr 07 Python
python写入中英文字符串到文件的方法
May 06 Python
一步步教你用Python实现2048小游戏
Jan 19 Python
Python双精度浮点数运算并分行显示操作示例
Jul 21 Python
利用Python找出序列中出现最多的元素示例代码
Dec 08 Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 Python
python 实现语音聊天机器人的示例代码
Dec 02 Python
深入浅析Python中的迭代器
Jun 04 Python
python删除文件夹下相同文件和无法打开的图片
Jul 16 Python
Python同时迭代多个序列的方法
Jul 28 Python
pycharm中使用request和Pytest进行接口测试的方法
Jul 31 Python
python实现移动木板小游戏
Oct 09 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生成自定义长度随机字符串的函数分享
2014/05/04 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
webpack打包并将文件加载到指定的位置方法
2018/02/22 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
浅谈python中get pass用法
2019/03/19 Python
详解Python time库的使用
2019/10/10 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
python实现马丁策略的实例详解
2021/01/15 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
小学生家长评语大全
2014/02/10 职场文书
个人培训自我鉴定
2014/03/28 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
城南旧事观后感
2015/06/11 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers