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的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
Python实现求数列和的方法示例
Jan 12 Python
python监控键盘输入实例代码
Feb 09 Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 Python
简单了解Django应用app及分布式路由
Jul 24 Python
python实现各种插值法(数值分析)
Jul 30 Python
Python随机函数库random的使用方法详解
Aug 21 Python
python Pillow图像处理方法汇总
Oct 16 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
python各层级目录下import方法代码实例
Jan 20 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
May 22 Python
使用keras2.0 将Merge层改为函数式
May 23 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与php MySQL 之间的关系
2009/07/17 PHP
Yii使用技巧大汇总
2015/12/29 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
js技巧--转义符"\"的妙用
2007/01/09 Javascript
学习ExtJS TextField常用方法
2009/10/07 Javascript
基于jquery & json的省市区联动代码
2012/06/26 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
详解Windows下安装Nodejs步骤
2017/05/18 NodeJs
Angular 项目实现国际化的方法
2018/01/08 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
Python编码类型转换方法详解
2016/07/01 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
python dumps和loads区别详解
2020/02/04 Python
简单了解python列表和元组的区别
2020/05/14 Python
python导入库的具体方法
2020/06/18 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
CSS3的颜色渐变效果的示例代码
2017/09/29 HTML / CSS
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
生产管理的三大手法
2013/11/11 职场文书
物业电工岗位职责
2013/11/20 职场文书
质量承诺书范文
2014/03/27 职场文书
土地转让协议书
2014/04/15 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
先进单位申报材料
2014/12/25 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
《蟋蟀的住宅》教学反思
2016/02/17 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python