UML面向对象的设计原则
里氏替换原则
不满足LSP的方案
CS游戏中的枪械类图,士兵使用枪杀敌,具体用什么枪,调用的时候才知道。有一种玩具手枪,增加一个类ToyGun,射不出子弹,业务调用类出现了问题。
Abstractgun抽象类
public abstract class Abstractgun { //枪支抽象类
public Abstractgun() { }
public abstract void shoot(); //枪用来射击杀戮!
}
Handgun实现类
publicclassHandgun extends Abstractgun { //手枪实现类
@Override //手枪的特点是携带方便,射程短
public Handgun() { }
public void shoot() {
System.out.println("手枪射击...");
}
}
ToyGun实现类
publicclassToyGun extends Abstractgun {
@Override
public void shoot() { } //玩具枪是不能射击的,虚构
}
Soldier士兵类
publicclassSoldier {
public Soldier() { }
public void kill(Abstractgun gun){
System.out.println("士兵开始杀人...");
gun.shoot();
}
}
测试代码:
classProgram