介绍本地扩展
问题
实用程序类不包含您需要的一些方法。但是不能将这些方法添加到类中。
解决方案
创建一个包含方法的新类,并使其成为实用程序类的子类或包装器。
之前

后

为什么重构
您正在使用的类没有您需要的方法。更糟糕的是,您不能添加这些方法(例如,因为这些类在第三方库中)。有两种方法:
创建一个子类从相关类中,包含方法并继承父类中的所有其他内容。这种方法更简单,但有时会被实用程序类本身阻塞(由于
最后
).创建一个包装器类将从实用程序类委托给相关对象。这种方法工作量更大,因为您不仅需要代码来维护包装器和实用程序对象之间的关系,而且还需要大量简单的委托方法来模拟实用程序类的公共接口。
好处
- 通过将额外的方法移动到单独的扩展类(包装器或子类),可以避免用不适合的代码将客户端类弄混。程序组件更连贯,更可重用。
如何重构
创建一个新的扩展类:
选项A:使它成为实用工具类的子类。
选项B:如果您决定创建一个包装器,则在其中创建一个字段,用于存储将对其进行委托的实用程序类对象。使用此选项时,还需要创建重复实用程序类的公共方法的方法,并包含对实用程序对象的方法的简单委托。
创建使用实用程序类的构造函数的参数的构造函数。
还可以创建一个替代的“转换”构造函数,在其参数中只接受原始类的对象。这将有助于用扩展替换原始类的对象。
在类中创建新的扩展方法。将外部方法从其他类移动到这个类,或者删除外部方法(如果它们的功能已经存在于扩展中)。
在需要实用程序类功能的地方,用新的扩展类替换实用程序类的使用。