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中用altzone()方法处理时区的教程
May 22 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
Dec 28 Python
Django基础知识与基本应用入门教程
Jul 20 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
Sep 29 Python
python调用c++返回带成员指针的类指针实例
Dec 12 Python
Python列表解析操作实例总结
Feb 26 Python
Python爬取YY评级分数并保存数据实现过程解析
Jun 01 Python
Python高阶函数与装饰器函数的深入讲解
Nov 10 Python
Python 如何利用ffmpeg 处理视频素材
Nov 27 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
Symfony2创建页面实例详解
2016/03/18 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
javascript中this的四种用法
2015/05/11 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
Javascript刷新页面的实例
2017/09/23 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
2018/03/08 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
js实现弹窗效果
2020/08/09 Javascript
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
python支持多继承吗
2020/06/19 Python
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
金融专业个人的自我评价
2013/10/18 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
成龙洗发水广告词
2014/03/14 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书