假设我正在写一些库存代码:
public void showInventory(List<Item> items) { for (Item item : items) { if (item instanceof ContainerItem) { // container display logic here } else if (item instanceof WeaponItem) { // weapon display logic here } // etc etc }}
这样可以编译并正常工作。但是它错过了面向对象设计的关键思想: 您可以定义父类来做一般有用的事情,而让子类填充特定的重要细节。
以上的替代方法:
abstract class Item { // insert methods that act exactly the same for all items here // now define one that subclasses must fill in themselves public abstract void show()}class ContainerItem extends Item { @Override public void show() { // container display logic here instead }}class WeaponItem extends Item { @Override public void show() { // weapon display logic here instead }}
现在
show(),在所有清单显示逻辑的子类中,方法都有一个地方可以看。我们如何访问它?简单!
public void showInventory(List<Item> items) { for (Item item : items) { item.show(); }}
我们将所有特定于项目的逻辑保留在特定的Item子类中。这使您的代码库更易于维护和扩展。它减少了第一个代码样本中长for-
each循环的认知压力。它
show()可以在您尚未设计的地方重复使用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)