Hessian源码分析之设计模式篇(八)

来源:互联网 发布:地瓜干 知乎 编辑:程序博客网 时间:2024/06/08 19:43

Hessian源码已经分析完了,在Hessian中主要使用到了两个设计模式,一个是策略模式,一个是模板方法模式

我们先来看看策略模式

在Hessian中向流中写数据都是通过Serializer接口的writeObject方法来实现的,而根据写出的对象的不同对应着很多的具体的实现类,类图如下(只画出了部分实现类)


因为对于不同类型的参数写出到输出流的方式是不一样的,如果用if...else...来实现的话,每增加一种新的类型都要修改,不仅容易出错而且不易维护

策略模式的使用场景如下

多个类只有在算法或者行为上稍有不同

策略模式的优点如下

1、策略可以自由切换:只要实现抽象策略,就可以成为策略家族的一个成员,通过角色对其封装,保证对外提供“可自由切换”的策略

2、避免使用多重条件判断:多重条件判断极容易出错,尤其是在具体策略逻辑复杂的情况下

3、扩展性良好:在现有的系统中增加一个策略只要实现接口就可以了,其他都不用修改,类似于一个可反复拆卸的插件

模板方法模式

HessianOutput类的call()方法负责将rpc调用过程中的方法信息和参数信息写到流中,代码如下

  public void call(String method, Object []args)    throws IOException  {    int length = args != null ? args.length : 0;        startCall(method, length);        for (int i = 0; i < length; i++)      writeObject(args[i]);        completeCall();  }
对于所有的rpc调用在写出方法信息上和写结尾信息上都是没有区别的,只有在写出具体参数的实现是不一样的,所以Hessian将写出方法信息放到了startCall方法中,结尾信息放到了completeCall()方法中,而具体的参数放到了writeObject()方法放到具体的子类中实现

模板方法的使用场景如下

1、多个子类有公有的方法,并且逻辑基本相同时

2、重要,复杂的算法,可以把核心算法设计为模板放方法,周边的相关细节功能由各个子类实现

模板方法的优点如下

1、封装不变部分,扩展可变部分

2、提取公共部分代码,便于维护

3、行为由父类控制,子类提供具体实现




原创粉丝点击