情景1:老张开车去东北
架构思想:【寻找变化点,将其抽象成一个父类并统一其子类的行为,便于扩展需求】
作用:抽象 统一 隔离
# ----------- 架构 ---------------
# People: 出行的可能是老张,也可能是老李、老王...因此抽象一个People类
# People的属性(姓名,年龄不一样),因此创建实例变量
# Vehicle: 出行的方式可能是开车,也可能是开飞机、坐火车...,每种交通工具的
# 出行方法都不一样,汽车是run(),飞机是fly(),就会导致客户端代码
# 调用的时候不断更改,违背了面向对象的设计原则,因此抽象一个Vehicle类。
# 以此统一其行为。
class People:
def __init__(self,name="") -> None:
self.name = name
def go_to(self,position,Vehicle):
Vehicle.transport()
class Vehicle:
def transport(self):
pass
# ----------- 具体实现 ---------------
class Car(Vehicle):
def transport(self):
print("开汽车去东北")
class Airplane(Vehicle):
def transport(self):
print("坐飞机去东北")
# ----------- 测试 -------------------
lz = People("老张")
lz.go_to("东北",Car())
lz.go_to("东北",Airplane())
情景二:手雷爆炸,目标受伤
# ------------- 架构师 -----------------
# 客户端
class Grenade:
def explode(self,target):
print("手雷爆炸")
target.get_hurt() # 编码时:调用父类的方法
# 父类统一行为
class AttackTarget:
def get_hurt(self):
pass
# ------------- 程序员 -----------------
# 子类多态
class Player(AttackTarget):
def get_hurt(self):
print("玩家碎屏")
class Enemy(AttackTarget):
def get_hurt(self):
print("敌人头顶爆字")
# ------------- 测试 -----------------
grenade = Grenade()
grenade.explode(Player()) #执行时:运行子类的方法
grenade.explode(Enemy()) #执行时:运行子类的方法