面试题答案
一键面试设计思路
- 定义抽象层:
- 创建抽象的武器类,定义武器攻击的抽象方法。这样角色依赖的是武器的抽象,而不是具体的武器实现类。
- 不同类型的武器继承自这个抽象武器类,并实现其攻击方法。
- 角色类依赖抽象武器:角色类通过构造函数或方法参数等方式接收抽象武器类的实例,而不是直接依赖具体武器类,从而实现依赖倒置。
关键代码示例
from abc import ABC, abstractmethod
# 抽象武器类
class Weapon(ABC):
@abstractmethod
def attack(self):
pass
# 具体武器类:剑
class Sword(Weapon):
def attack(self):
return "用剑砍击"
# 具体武器类:弓
class Bow(Weapon):
def attack(self):
return "用弓射击"
# 角色类,依赖抽象武器
class Character:
def __init__(self, weapon: Weapon):
self.weapon = weapon
def perform_attack(self):
return self.weapon.attack()
你可以这样使用这些类:
# 创建具体武器实例
sword = Sword()
bow = Bow()
# 创建角色并赋予武器
warrior = Character(sword)
archer = Character(bow)
print(warrior.perform_attack())
print(archer.perform_attack())