第二天:创建型模式--抽象工厂模式
时间:2022-07-24
本文章向大家介绍第二天:创建型模式--抽象工厂模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
零、抽象工厂
- 什么是抽象工厂 抽象工厂设计模式是抽象方法的一种泛化,一个抽象工厂是一组工厂方法,每个工厂方法负责产生不同种类的对象。
一、身边的例子
- 生产汽车部件 冲压不同的部件用的机器是相同的。机器装配的模型是可配的,随时改变。
- django_factory 程序包 django_factory是一个用于在测试中创建Django模型的抽象工厂实现,可用来为支持测试专有属性的模型创建实例。
二、什么情况下使用
- 需要将对象的使用和创建解耦的时候;
- 需要提高应用的性能和内存使用率的时候;
- 创建对象的代码分布在多个不同的地方,且不仅仅在一个方法中,导致无法跟踪这些对象的时候。
三、何时使用抽象工厂 / 工厂方法
一开始使用工厂方法,在后期需要许多工厂方法,将创建一系列对象的过程合并在一起形成抽象工厂。抽象工厂有一个优点,在使用工厂方法是从用户视角通常是看不到的,抽象工厂能够通过改变激活的工厂方法动态的改变应用的行为。
四、应用案例
# 青蛙类
class Frog:
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
def interact_with(self, obstacle):
print('{} the Forg encounters {} and {}!'.format(self, obstacle, obstacle.action()))
# 虫子类
class Bug:
def __str__(self):
return 'a bug'
def action(self):
return 'eats it'
# 青蛙虫子游戏类
class FrogWorld:
def __init__(self, name):
print(self)
self.player_name = name
def __str__(self):
return 'nnt----- Forg World ------'
def make_character(self):
return Frog(self.player_name)
def make_obstacle(self):
return Bug()
# 巫师类
class Wizard:
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
def interact_with(self, obstacle):
print(self)
print('{} the Wizard battles against {} and {}!'.format(self, obstacle, obstacle.action()))
# 怪兽类
class Ork:
def __str__(self):
return 'an evil ork'
def action(self):
return 'kills it'
# 巫师世界游戏类
class WizardWorld:
def __init__(self, name):
print(self)
self.player_name = name
def __str__(self):
return 'nnt------ Wizard World ------'
def make_character(self):
return Wizard(self.player_name)
def make_obstacle(self):
return Ork()
# 游戏入口类
class GameEnvironment:
def __init__(self, factory):
# 创建角色
self.hero = factory.make_character()
# 创建障碍物
self.obstacle = factory.make_obstacle()
def play(self):
self.hero.interact_with(self.obstacle)
# 验证输入的年龄
def validate_age(name):
try:
age = input('Welcome {}.How old are you ?'.format(name))
age = int(age)
except ValueError as err:
print("Age {} is invalid, please try again...".format(age))
return (False, age)
return (True, age)
def main():
name = input("Hello. What's tour name? ")
valid_input = False
while not valid_input:
valid_input, age = validate_age(name)
game = FrogWorld if age < 18 else WizardWorld
environment = GameEnvironment(game(name))
environment.play()
if __name__ == '__main__':
main()
源码下载地址:https://gitee.com/bugback/17Tian17SheJiMoShi
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法