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实现mysql的单引号字符串过滤方法
Nov 14 Python
Pandas标记删除重复记录的方法
Apr 08 Python
python 文本单词提取和词频统计的实例
Dec 22 Python
Python如何获得百度统计API的数据并发送邮件示例代码
Jan 27 Python
Python银行系统实战源码
Oct 25 Python
Pytorch 神经网络—自定义数据集上实现教程
Jan 07 Python
Python中if有多个条件处理方法
Feb 26 Python
Python3操作YAML文件格式方法解析
Apr 10 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
May 18 Python
Vs Code中8个好用的python 扩展插件
Oct 12 Python
python 对xml解析的示例
Feb 27 Python
pytorch实现加载保存查看checkpoint文件
Jul 15 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
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
2011/08/08 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
yii2 commands模式以及配置crontab定时任务的方法
2017/08/19 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
AngularJS监听路由的变化示例代码
2016/09/23 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
js判断数组是否包含某个字符串变量的实例
2017/11/24 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
Python 模块EasyGui详细介绍
2017/02/19 Python
Python如何实现MySQL实例初始化详解
2017/11/06 Python
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
2020/01/10 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
性能测试工程师的面试题
2015/02/20 面试题
技术副厂长岗位职责
2013/12/26 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
颐和园导游词
2015/01/30 职场文书
三八节活动简报
2015/07/20 职场文书
2016春季运动会前导词
2015/11/25 职场文书
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS
Python中的嵌套循环详情
2022/03/23 Python
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle
在python中读取和写入CSV文件详情
2022/06/28 Python