visitor&RTTI(java版)
---------------------------------------
interface ErrorBase
{
public void handle(ErrorHandler handler);
}
class DBError implements ErrorBase
{
public void handle(ErrorHandler handler) {
try {
DbErrorHandler dbHandler = (DbErrorHandler)handler;
dbHandler.handle(this);
}
catch(ClassCastException e) {
}
}
}
class CommError implements ErrorBase
{
public void handle(ErrorHandler handler) {
try {
CommErrorHandler commHandler = (CommErrorHandler)handler;
commHandler.handle(this);
}
catch(ClassCastException e)/ {
}
}
}
interface ErrorHandler
{
}
interface DbErrorHandler
{
public void handle(DBrror dbError);
}
interface CommErrorHandler
{
public void handle(CommError commError);
}
class GUISys implements ErrorHandler, DbErrorHandler, CommErrorHandler
{
public void announceError(ErrorBase error) {
error.handle(this);
}
public void handle(DBError dbError) {
/* 通知用户界面进行有关数据库错误的处理 */
}
public void handle(CommError commError) {
/* 通知用户界面进行有关通信错误的处理 */
}
}
class LogSys implements ErrorHandler, DbErrorHandler, CommErrorHandler
{
public void announceError(ErrorBase error) {
error.handle(this);
}
public void handle(DBError dbError) {
/* 通知日志系统进行有关数据库错误的处理 */
}
public void handle(CommError commError) {
/* 通知日志系统进行有关通信错误的处理 */
}
}