如何在 Java 中安全地使用子类型( 三 )


让我们用委托来解决 DataHashSet 中的问题:
public class DataHashSet implements Set { private int addCount = 0; private Set set; public function DataHashSet(Set set) { This.set = set; } public boolean function add(Object object) { addCount++; return This.set.add(object); } public boolean function addAll(Collection collection) { addCount += collection.size(); return This.set.addAll(collection); } public int function getAddCount() { return addCount; }}4. 如何使用 Skeletal 模式?
Skeletal 模式既不损失灵活性,又能享受 subtype 的优点 。它为每个接口提供一个实现该接口的抽象类,不指定基础方法(primitive method) 。这意味着将方法设为 abstract 由子类实现,同时它还定义了非基础方法 。然后,由使用该接口的开发者实现接口,负责框架实现 。它不如包装类灵活,比如组合或委托 。为了增加其灵活性,可以使用包装类将调用委托给框架实现的匿名子类对象 。




推荐阅读