设计模式六大原则之----里氏替换原则
一、定义
友情提醒:xmind导出的图片有点模糊,请放大查看 二、优缺点
2.1 优点
2.2 缺点
三、重点
四、 注意点
五、案例
5.1 遵循里氏替换原则代码实现/** * 枪的抽象类,包含抽象方法和一个成员变量 * * Created by rytong on 2017/11/14. */ public abstract class IGun { protected static final String TAG = "IGun"; public abstract void shoot(); } 玩具枪类,仿真枪类似: /** * 玩具枪类 * Created by rytong on 2017/11/14. */ public class PlayerGun extends IGun { @Override public void shoot() { Log.e(TAG,"用玩具枪打气球"); } } 打气球的玩家: /** * 打气球的玩家 * Created by rytong on 2017/11/14. */ public class Player { IGun gun; public Player(IGun gun) { this.gun = gun; } public void shoot(){ gun.shoot(); } } 玩家打气球: IGun iGun = new PlamingGun(); new Player(iGun).shoot(); IGun iGun1 = new PlayerGun(); new Player(iGun1).shoot(); 玩家打了两枪,结果:
11-14 21:04:49.084 20053-20053/com.designpatterndisclipline E/IGun: 使用仿真枪打气球 11-14 21:04:49.084 20053-20053/com.designpatterndisclipline E/IGun: 用玩具枪打气球 5.2 修改逻辑模拟不严格遵循里氏替换原则可能存在的问题给IGun增加两个方法,一个内部调用,一个开放出来player调用 /** * 枪的抽象类,包含抽象方法和一个成员变量 * * Created by rytong on 2017/11/14. */ public abstract class IGun { protected static final String TAG = "IGun"; public abstract void shoot(); private void preBullet(){ Log.e(TAG,"先准备好子弹才能射击。"); } public void fire(){ preBullet(); shoot(); } } PlayerGun不遵循里氏替换原则,覆盖父类的成员变量和方法,而PlamingGun完全遵循里氏替换原则。 /** * 玩具枪类 * Created by rytong on 2017/11/14. */ public class PlayerGun extends IGun { private String TAG = "PlayerGun"; @Override public void shoot() { Log.e(TAG,"用玩具枪打气球"); } @Override public void fire() { // super.fire(); Log.e(TAG,"我在玩玩具枪,不打气球"); } } /** * 仿真枪类 * Created by rytong on 2017/11/14. */ public class PlamingGun extends IGun { @Override public void shoot() { Log.e(TAG,"使用仿真枪打气球"); } } 修改玩家射击的方法 /** * 打气球的玩家 * Created by rytong on 2017/11/14. */ public class Player { IGun gun; public Player(IGun gun) { this.gun = gun; } public void shoot(){ gun.fire(); } } 玩家射击气球: IGun iGun = new PlamingGun(); new Player(iGun).shoot(); IGun iGun1 = new PlayerGun(); new Player(iGun1).shoot(); 执行结果: 11-14 21:17:50.800 28393-28393/com.designpatterndisclipline E/IGun: 先准备好子弹才能射击。 11-14 21:17:50.800 28393-28393/com.designpatterndisclipline E/IGun: 使用仿真枪打气球 11-14 21:17:50.802 28393-28393/com.designpatterndisclipline E/PlayerGun: 我在玩玩具枪,不打气球
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |