jhe*_*dus 5 java design-patterns
我怀疑它是编写它的类的类型,但我不是100%肯定,有人可以确认我的怀疑,并可能提供Java语言规范的参考,其中定义了这种行为?
假设class A有一个在其体内a()使用this关键字的方法,类B扩展了class A.现在class B继承了方法a(),但是,我不确定thisin 的编译时类型B.a()是现在A还是B?
我问这个,因为我想了解访问者模式是如何工作的,因为它是这个罗伯特C.马丁的描述游客章从该原则,模式和敏捷软件开发的实践.
this如果想要完全理解访问者模式,那么知道编译时类型似乎是至关重要的,因为在编译时解析了重载方法调用.更具体而言,我指的编译时间类型this在accept在访问者模式的方法.
的类型this是使用它的类的类型。事实上,文章中的访客模式对于发挥作用至关重要。
访问者模式分两步实现双重调度 -accept在被访问的对象中选择适当的方法(第一阶段),然后visit在访问者中选择适当的方法(第二阶段)。第一条腿是通过重写实现的;第二条腿是通过重载来实现的。
请注意,第二条腿不必使用重载。事实上,为了更好的可读性,通常不在那里使用它。比较这两个实现:
// Copied from Listing 29-2
public interface ModemVisitorOverload
{
void visit(HayesModem modem);
void visit(ZoomModem modem);
void visit(ErnieModem modem);
}
public interface ModemVisitorNoOverload
{
void visitHayes(HayesModem modem);
void visitZoom(ZoomModem modem);
void visitErnie(ErnieModem modem);
}
Run Code Online (Sandbox Code Playgroud)
第二种实现不使用重载。它的工作方式完全相同,只是代码的人类读者会立即看到发生了什么。
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |