在这里,创建型模式包括:
1 单例模式;2 工厂方法模式;3 抽象工厂模式;4 创建者模式;5 原始设计模式。
1 单例模式 singleton
作用:单一的创建一个对象
需求场景:个人对身份证的管理
Python实现:
创建一个IdentityCard的类;
class IdentityCard:
def __init__(self):
self.name = '令狐冲'
self.id = '120234023049239832'
self.address = '北京市'
创建一个Person的类管理IdentityCard
class Person:
identity_card = None
# 获取个人的身份证
def get_identity_id(self):
if self.identity_card is None:
self.identity_card = IdentityCard.IdentityCard()
return self.identity_card
2 工厂方法模式 factory method
作用:通过一个方法创建不同的对象
需求与场景:想买一辆车,选择1(买小汽车);2 (买客车);3(买货车)
Python实现:
创建类 Car(小汽车)、PassengerCar(客车)和FreightCar(火车)
针对买车创建FactoryMethod类
class FactoryMethod:
def buy_car(self, type):
if (type.endswith('1')):
car = Car()
elif (type.endswith('2')):
car = PassengerCar()
elif (type.endswith('3')):
car = FreightCar()
return car
3 抽象工厂模式 abstract factory
作用:通过一个类创建多个对象。
需求场景:一个人到一个陌生的城市打工,逐渐富有以后,会买房、买车、娶媳妇。
Python实现:
创建类Car(汽车)、House(房子)和wife(媳妇)
创建AbstractFactory类来实现目标。
class AbstractFactory:
# 买一辆小轿车
def buy_car(self):
car = Car()
return car
# 买一座房子
def buy_house(self):
house = House()
return house
# 娶一个好女孩
def marry_wife(self):
wife = Wife()
return wife
4 建造者模式 builder
作用:。创建一个对象的多个部分
需求场景:例如建造房子
Python实现:
创建一个House类:
class House:
def __init__(self):
self.room = ''
self.door = ''
# 返回房间
def get_room(self):
return self.room
# 返回门
def get_door(self):
return self.door
创建一个HouseBuilder类:
class HouseBuilder():
def __init__(self):
self.house = House()
# 构建房间
def build_room(self, room):
self.house.room = room
# 构建门
def build_door(self, door):
self.house.door = door
def get_house(self):
return self.house
创建一个HouseDirector类:
class HouseDirector:
def __init__(self):
pass
def build_house(self):
builder = HouseBuilder()
builder.build_room('木头房')
builder.build_door('三角门')
return builder.get_house()
我们先创建一个房间,然后创建一扇门,这样一个房子就建好了。这就是建造者模式。
5 原始设计模式 prototype
场景:对象简单,整个对象clone,
需求场景:例如画直线;我们一般都是拷贝一条,然后调整线的长度、颜色等属性;
Python实现:
创建一个Line类:
class Line:
def __init__(self):
self.color = '黑色'
self.length = 6
def get_color(self):
return self.color
def get_length(self):
return self.length
创建一个LineTool类:
class LineTool:
# 划线函数
def clone(self):
line = Line.Line()
line_a = copy.deepcopy(line)
return line_a
通过clone返回一个对象,这就是原始设计模式。