打字猴:1.700454494e+09
1700454494 设计模式之禅 [:1700453909]
1700454495 设计模式之禅 2.2 纠纷不断,规则压制
1700454496
1700454497 里氏替换原则为良好的继承定义了一个规范,一句简单的定义包含了4层含义。
1700454498
1700454499 1.子类必须完全实现父类的方法
1700454500
1700454501 我们在做系统设计时,经常会定义一个接口或抽象类,然后编码实现,调用类则直接传入接口或抽象类,其实这里已经使用了里氏替换原则。我们举个例子来说明这个原则,大家都打过CS吧,非常经典的FPS类游戏,我们来描述一下里面用到的枪,类图如图2-1所示。
1700454502
1700454503
1700454504
1700454505
1700454506 图2-1 CS游戏中的枪支类图
1700454507
1700454508 枪的主要职责是射击,如何射击在各个具体的子类中定义,手枪是单发射程比较近,步枪威力大射程远,机枪用于扫射。在士兵类中定义了一个方法killEnemy,使用枪来杀敌人,具体使用什么枪来杀敌人,调用的时候才知道,AbstractGun类的源程序如代码清单2-1所示。
1700454509
1700454510 代码清单2-1 枪支的抽象类
1700454511
1700454512 public abstract class AbstractGun{
1700454513
1700454514 //枪用来干什么的?杀敌!
1700454515
1700454516 public abstract void shoot();
1700454517
1700454518 }
1700454519
1700454520 手枪、步枪、机枪的实现类如代码清单2-2所示。
1700454521
1700454522 代码清单2-2 手枪、步枪、机枪的实现类
1700454523
1700454524 public class Handgun extends AbstractGun{
1700454525
1700454526 //手枪的特点是携带方便,射程短
1700454527
1700454528 @Override
1700454529
1700454530 public void shoot(){
1700454531
1700454532 System.out.println(“手枪射击……”);
1700454533
1700454534 }
1700454535
1700454536 }
1700454537
1700454538 public class Rifle extends AbstractGun{
1700454539
1700454540 //步枪的特点是射程远,威力大
1700454541
1700454542 public void shoot(){
1700454543
[ 上一页 ]  [ :1.700454494e+09 ]  [ 下一页 ]