Iva*_*van 2 oop design-patterns
我对适配器类没有什么疑问.我知道适配器类的目标是什么.何时应该使用.我怀疑是关于班级建设.我已经检查了一些教程,并且所有人都说我应该将"Adaptee"类作为依赖项传递给我的"Adapter".例如
Class SampleAdapter implements MyInterface
{
private AdapteeClass mInstance;
public SampleAdapter(AdapteeClass instance)
{
mInstance=instance;
}
}
Run Code Online (Sandbox Code Playgroud)
此示例是从维基百科复制的.正如您所见,AdapteeClass作为依赖项传递给我的对象.问题是为什么?如果我正在改变对象的界面很明显我将使用"新"界面,我不需要"旧"界面.为什么我需要在我的适配器外创建"旧"类的实例.有人可能会说我应该使用依赖注入,所以我可以传递任何我想要的,但这是适配器 - 我需要更改具体类的接口.就个人而言,我认为代码贝娄更好.
Class SampleAdapter implements MyInterface
{
private AdapteeClass mInstance;
public SampleAdapter()
{
mInstance= new AdapteeClass();
}
}
Run Code Online (Sandbox Code Playgroud)
你有什么意见?
我会说当你遇到复杂的对象时,你应该总是避免使用类中的new运算符(除非类是a Builder或者Factory),以减少耦合并使代码更易于测试.可以在类方法中构造像List或Dictionary或值对象这样的课程对象(这可能是类方法的目的!)
让我们举例来说,你的AdapteeClass是一个Remote Proxy.如果您想使用单元测试,您的单元测试必须使用真正的代理类,因为在单元测试中无法替换它.
如果您使用第一种方法,则在运行单元测试时可以轻松地将模拟或伪造注入构造函数中,以便您可以测试所有代码路径.
Google提供了编写可测试代码的指南,该代码更详细地描述了这一点,但一些重要的观点是:
不可测试代码的警告标志
- 构造函数或字段声明中的新关键字
- 静态方法在构造函数或字段声明中调用
- 除了构造函数中的字段赋值之外的任何内容
- 构造函数完成后对象未完全初始化(注意初始化方法)
- 控制流(构造函数中的条件或循环逻辑)
- 代码在构造函数中执行复杂的对象图构造,而不是使用工厂或构建器
- 添加或使用初始化块
| 归档时间: |
|
| 查看次数: |
1795 次 |
| 最近记录: |