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 30 Python
python类装饰器用法实例
Jun 04 Python
关于Python中Inf与Nan的判断问题详解
Feb 08 Python
python学生信息管理系统
Mar 13 Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
Flask模板引擎之Jinja2语法介绍
Jun 26 Python
django如何通过类视图使用装饰器
Jul 24 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
python脚本实现mp4中的音频提取并保存在原目录
Feb 27 Python
2021年pycharm的最新安装教程及基本使用图文详解
Apr 03 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 Session 变量的使用方法详解与实例代码
2013/09/11 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
PHP封装XML和JSON格式数据接口操作示例
2019/03/06 PHP
执行iframe中的javascript方法
2008/10/07 Javascript
JQuery从头学起第二讲
2010/07/04 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
Jquery Ajax xmlhttp请求成功问题
2015/02/04 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
Python函数中定义参数的四种方式
2014/11/30 Python
Python操作MySQL数据库9个实用实例
2015/12/11 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
Python中pillow知识点学习
2018/04/30 Python
python Tkinter的图片刷新实例
2019/06/14 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
什么是python的id函数
2020/06/11 Python
Django admin组件的使用
2020/10/24 Python
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
总经理岗位职责
2013/11/09 职场文书
物流司机岗位职责
2013/12/28 职场文书
服务宗旨标语
2014/07/01 职场文书
收银员岗位职责
2015/02/03 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
大学校园招聘会感想
2015/08/10 职场文书
创业计划书之寿司
2019/07/19 职场文书
Redis基本数据类型Set常用操作命令
2022/06/01 Redis