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 open读写文件实现脚本
Sep 06 Python
Python选择排序、冒泡排序、合并排序代码实例
Apr 10 Python
PYTHON基础-时间日期处理小结
May 05 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
Python函数的默认参数设计示例详解
Dec 01 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
Feb 20 Python
python3获取控制台输入的数据的具体实例
Aug 16 Python
如何基于Python按行合并两个txt
Nov 03 Python
Python-OpenCV实现图像缺陷检测的实例
Jun 11 Python
Python使用openpyxl批量处理数据
Jun 23 Python
ROS系统将python包编译为可执行文件的简单步骤
Jul 25 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中取得URL的根域名的代码
2011/03/23 PHP
PHP中session跨子域的三种实现方法
2016/07/25 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
javascript操作referer详细解析
2014/03/10 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
javascript的几种写法总结
2016/09/30 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
详解Django框架中用context来解析模板的方法
2015/07/20 Python
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
python实现的汉诺塔算法示例
2019/10/23 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
2020/04/22 Python
python3字符串输出常见面试题总结
2020/12/01 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
使用HTML5做个画图板的方法介绍
2013/05/03 HTML / CSS
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
中专三年学习的个人自我评价
2013/12/12 职场文书
群众路线教育实践活动调研报告
2014/11/03 职场文书
被告代理词范文
2015/05/25 职场文书
Nginx配置SSL证书出错解决方案
2021/03/31 Servers
一起来学习Python的元组和列表
2022/03/13 Python
python解析json数据
2022/04/29 Python