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数据类型转换函数总结
Mar 11 Python
pymongo给mongodb创建索引的简单实现方法
May 06 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
Jun 01 Python
python实现淘宝秒杀脚本
Jun 23 Python
python实现数据分析与建模
Jul 11 Python
Python银行系统实战源码
Oct 25 Python
matplotlib.pyplot画图并导出保存的实例
Dec 07 Python
Django后台管理系统的图文使用教学
Jan 20 Python
详解Python 中的容器 collections
Aug 17 Python
Django正则URL匹配实现流程解析
Nov 13 Python
Python中对象的比较操作==和is区别详析
Feb 12 Python
Keras多线程机制与flask多线程冲突的解决方案
May 28 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数组是否为索引数组的实现方法
2013/06/13 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
Laravel5.7框架安装与使用学习笔记图文详解
2019/04/02 PHP
jQuery中:header选择器用法实例
2014/12/29 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
原生js+cookie实现购物车功能的方法分析
2017/12/21 Javascript
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
Python编写简单的HTML页面合并脚本
2016/07/11 Python
Python实现注册登录系统
2017/08/08 Python
Django开发中的日志输出的方法
2018/07/02 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
2020/04/02 Python
Python 如何创建一个线程池
2020/07/28 Python
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
《黄山奇石》教学反思
2014/04/19 职场文书
服务之星事迹材料
2014/05/03 职场文书
比赛口号大全
2014/06/10 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
职工食堂管理制度
2015/08/06 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
sql字段解析器的实现示例
2021/06/23 SQL Server
Python识别花卉种类鉴定网络热门植物并自动整理分类
2022/04/08 Python
零基础学java之循环语句的使用
2022/04/10 Java/Android