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生成日历实例解析
Aug 21 Python
在Python中使用sort()方法进行排序的简单教程
May 21 Python
Python正则表达式使用经典实例
Jun 21 Python
Python中文件的读取和写入操作
Apr 27 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
Python实现Event回调机制的方法
Feb 13 Python
利用pandas合并多个excel的方法示例
Oct 10 Python
使用darknet框架的imagenet数据分类预训练操作
Jul 07 Python
接口自动化多层嵌套json数据处理代码实例
Nov 20 Python
Python中相见恨晚的技巧
Apr 13 Python
关于Numpy之repeat、tile的用法总结
Jun 02 Python
Python必备技巧之字符数据操作详解
Mar 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 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
php中使用redis队列操作实例代码
2013/02/07 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
yii添删改查实例
2015/11/16 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
python实现按长宽比缩放图片
2018/06/07 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
python利用后缀表达式实现计算器功能
2021/02/22 Python
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
优秀的自荐信要注意哪些
2014/01/03 职场文书
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
计算机专业求职信
2014/06/02 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
企业2014年度工作总结
2014/12/10 职场文书
退休教师追悼词
2015/06/23 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书