博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java类可选,类层次结构中的Java可选接口
阅读量:6279 次
发布时间:2019-06-22

本文共 1452 字,大约阅读时间需要 4 分钟。

假设您有一个大约30个类的Java类层次结构,具有基类BaseClass和两个主要子类(SubclassA,SubclassB),每个子类具有多个子类.其中一些子类具有某种行为.假设你可以“戳”它们,改变它们的状态. (这是向现有层次结构添加行为的新要求.“Poke”对大多数类来说毫无意义.)

interface Pokeable {

void poke();

int getTimesPoked();

}

public class Pokey extends SubclassB

implements Pokeable {

private int timesPoked = 0;

public void poke() {

timesPoked++;

}

public int getTimesPoked() {

return timesPoked;

}

}

这应该通过只在那些需要它的类中实现Pokeable来完成,然后在所有代码中执行以下操作,这些代码必须戳掉任何可以被攻击的对象吗?

public void process(BaseClass b) {

if (b instanceof Pokeable) {

((Pokeable)b).poke();

}

}

或者整个层次结构是否应该实现Pokeable,以便为真正可能的少数人提供服务?

interface Pokeable {

void poke();

int getTimesPoked();

boolean isReallyPokeable();

}

public class BaseClass implements Pokeable {

public void poke() {}

public int getTimesPoked() { return 0; }

public boolean isReallyPokeable() { return false;}

}

public class Pokey {

private int timesPoked = 0;

@Override

public void poke() {

timesPoked++;

}

@Override

public int getTimesPoked() {

return timesPoked;

}

@Override

public boolean isReallyPokeable() {

return true;

}

}

public void process(BaseClass b) {

b.poke();

}

编辑补充:这是一个双重调度问题. “扑克”代码对某个对象执行某些操作时,如果该对象是“可戳”的,则必须调用“poke()”,否则不能.你是否“戳()”取决于是否想要戳戳以及物体是否接受戳戳.我可以使用访问者模式,但这似乎使它更复杂.

解决方法:

如果一个类不可用,我建议不要实现Pokeable接口,因为这会让人感到困惑.

请改用以下方法之一.

>创建一个实现Pokable的BaseClass的抽象或具体子类,并让所有可能的Pokeable子类扩展它.如果通过所有实现类中的相同逻辑实现poke(),则此方法很有效.

>让每个子类单独实现Pokeable

标签:java,inheritance,styles,interface

来源: https://codeday.me/bug/20190826/1728447.html

转载地址:http://qznva.baihongyu.com/

你可能感兴趣的文章
js数组的操作
查看>>
springmvc Could not write content: No serializer
查看>>
Python系语言发展综述
查看>>
新手 开博
查看>>
借助开源工具高效完成Java应用的运行分析
查看>>
163 yum
查看>>
第三章:Shiro的配置——深入浅出学Shiro细粒度权限开发框架
查看>>
80后创业的经验谈(转,朴实但实用!推荐)
查看>>
让Windows图片查看器和windows资源管理器显示WebP格式
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
vim使用点滴
查看>>
embedded linux学习中几个需要明确的概念
查看>>
mysql常用语法
查看>>
Morris ajax
查看>>
【Docker学习笔记(四)】通过Nginx镜像快速搭建静态网站
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看>>
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>