设计模式之禅中里氏替换原则中有一点困惑
设计模式之禅中里氏替换原则中有一点困惑简介:
图中红色方框内的代码 怎么写?解决方法:<pre>
<code>class AbstractGun {
private AbstractGun gun;
public void shoot(){
L
图中红色方框内的代码 怎么写?
解决方法:
class AbstractGun {
private AbstractGun gun;
public void shoot(){
Log.d("open shoot");
}
public void setGun(AbstractGun gun){
this.gun = gun;
}
public void getGun(){
return this.gun ;
}
}
class AbstractToy extends AbstractGun{
private AbstractToyGun gun;
@Overorde
public void shoot(){
parent.gun = this.gun
Log.d("toy gun shoot");
}
}
-------------- 记事本写的 不知道有没有错 ,其实就是类覆盖 子类既可以执行父类方法 也可以执行子类自己重载的的方法
觉得不是这么写的 如果继承的话 这个UML类图的继承关系不是使用虚线表示的,AbstracyToy和AbstractGun很明显是依赖关系,所以我是这样写的
public abstract class AbstractToy { public AbstractGun abstractGun; public void setAbstractGun(AbstractGun abstractGun) { this.abstractGun = abstractGun; } abstract void shoot(); }顶
class AbstractGun { private AbstractGun gun; public void shoot(){ Log.d("open shoot"); } public void setGun(AbstractGun gun){ this.gun = gun; } public void getGun(){ return this.gun ; } } interface AbstractToy { } class ToyGun extends AbstractGun implements AbstractToy{ } class Rifle extends AbstractGun { }
AbstractToy 定义成接口形式好点
感受完了,在代码层我觉得你的这种方式 更合适,但是玩具Gun这个类锁抽象出来的,理论上应该定义成抽象类,因为接口一般是偏向于 拥有某个功能。而且上述UML类图 表达的意思 AbstractToy 也不会是接口。本文用户投稿或网站收集转载,如有侵权请联系本站。