设计模式 里氏替换原则

171 阅读2分钟

  设计模式 里氏替换原则

  继续里氏替换原则。

  上回栗子为正方形不能被长方形继承,这次,具体

  子类必须实现父类的方法

  类图

  


  对具体代码进行实践

  


  


  接着拥有枪,定义士兵

  


  最后定义整个场景

  


  在场景中,三毛需要什么枪,就直接new 出一个枪即可,然后其内通过抽象类获取到对象,然后对齐进行修饰

  更改枪

  如果要更改枪,直接增加新的类即可

  


  由于玩具枪不能射击,所以代码如下

  


  对参加进行修改

  


  由于之前在士兵类中定义了shoot方法,导致三毛杀敌,业务出现问题

  解决,只能再次定义一个新的玩具枪的抽象类和强的抽象类之间存在泛化关系

  子类可以拥有行为和外观

  对步枪继续继承一些类,该类更加详细

  


  实现以下AUG类

  


  需要增加阻击手和阻击枪之间存在组合关系

  uml图如下

  


  实现阻击手

  


  这就可以啦。在场景中可以杀死敌人

  


  这里直接将子类传递进入。

  Java中向下转型不安全

  


  好吧,在子类出现的地方,父类未必就可以出现。。。向下强制转型,不安全

  覆盖或实现父类的方法时输入参数可以被放大

  里式替换原则要求定义一个契约,即父类或接口,即契约设计。

  


  这个类完成转换

  然后定义子类

  


  然后接着使用

  


  在上方中父类被执行

  根据里氏替换原则,子类能替代父类

  


  上方的即为里氏替换原则。

  子类代替父类传入,子类永远不会被执行。子类要运行,必须重写父类。或者是参数的范围更宽

  举例子,如果父类参数条件大,子类参数条件小

  


  


  


  此时可以运行

  根据里氏替换原则,子类能使用的地方,父类也能使用。

  


  子类被执行,

  总结

  重载实现父类的时候,输入的参数要求放大

  重写,实现父类的时候可以缩小。