Python设计模式之抽象工厂模式

作者:WuLex 时间:2021-02-06 09:18:59 

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,抽象工厂模式
0
投稿

猜你喜欢

  • 发现IE6下URL path不会自动补全

    2009-03-31 12:52:00
  • jQuery中$.ajax的实现解析

    2008-07-20 13:11:00
  • php+mysql开发的最简单在线题库(在线做题系统)完整案例

    2023-08-21 20:03:14
  • oracle中添加删除主键的方法

    2023-06-30 00:28:52
  • PHP中array_slice函数用法实例详解

    2023-06-20 20:18:04
  • JavaScript面向对象的简单介绍

    2008-06-27 12:37:00
  • ASP与Excel结合生成数据表和Chart图的代码

    2011-03-08 10:50:00
  • Dreamweaver层使用八定律

    2008-05-16 11:41:00
  • ASP使用wsImage组件给图片加水印

    2008-12-29 19:14:00
  • asp随机获取access数据库中的一条记录

    2007-08-15 13:11:00
  • Node.js和PHP根据ip获取地理位置的方法

    2023-11-14 21:23:13
  • ASP链接Mysql数据库 非DSN连接的方法

    2009-03-09 18:24:00
  • GoFrame框架gcache的缓存控制淘汰策略实践示例

    2023-07-22 06:41:19
  • 页面软键盘汉字输入

    2010-09-01 20:41:00
  • 关于VSCode 配置使用 PyLint 语法检查器的问题

    2023-06-18 17:10:33
  • 两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法

    2023-06-25 12:44:15
  • 浅谈LogMiner的使用方法

    2009-02-28 11:12:00
  • php解析字符串里所有URL地址的方法

    2023-08-19 08:31:38
  • asp.net DropDownList实现二级联动效果

    2023-07-23 07:48:41
  • Dreamweaver技巧十二招

    2009-07-05 18:53:00
  • asp之家 网络编程 m.aspxhome.com