寄生型设计模式在Swing应用开发中的实践(5)

    作者:课课家教育更新于: 2016-02-03 15:37:42

    大神带你学编程,欢迎选课

      寄生模式的导出

      根据上面的对辅助类内存泄露方案的处 理,可以推广到所有存在寄生特征的设计场景中进行通用化,进而定义寄生模式。

      寄生模式结构示意图

    寄生型设计模式在Swing应用开发中的实践(5)_java_java辅助类_课课家

      宿主对象:为其他对象提供所需服务的。调用寄生对象提供服务并为它提供一个钩子,以前面章节的实例对应可以理解 为,GUIEngine 是宿主提供 Outdoor_UPS.XML 文件描述的界面创建服务,实际是调用对应的辅助类来实现界面组件的访问 服务的,辅助类会调用 GUIEngine 类,同样 GUIEngine 也会挂接辅助类。

      寄生对象:为宿主对象提供服务,如:为真实对象提供服务的模拟等;此处可以理解为,辅助类为界面对象提供模拟服 务,使得操作起来更方面和符合习惯。

      开关变量:确定寄生对象如何提供服务的变量,我们可以认为其实宿主类本身是可以提供服务的,但有寄生类来提供更 为方便,但在某些情况下,以上文的案例,如果仅仅只需要临时访问某个界面的很少数量的控件,而界面本身控件数量很多 ,如果还创建寄生类就不太合算了,此时可以由宿主类直接提供服务;

      创建者:创建宿主对象的对象,它将开关变量传递给寄生变量以动态决定谁提供服务;

      客户对象:使用宿主对象服务的对象,当开关变量被设置,则由寄生对象提供服务;

      以前面的案例为例,我们想访问并设置 UPS TYPE 界面中文本输入控件的值为 100,首先创建一个 GUIEngine 对象,通 过开关变量,设置是否创建辅助界面类,如果创建,可以通过 UPSTypeHelper 来完成对界面值的设置了。

      寄 生模式对象调用顺序

      我们来看代码的实现过程

      清单 8. 寄 生模式的实现实例

      public class Client {

      private Create ct;

      public Client(){

      ct=new Create("Outdoor_UPS.xml",true );/* 打开开关辅助对象提供服务 */

      }

      public boolean SetUPSTypeValue(int typeValue)

      {

      try {

      ct.getServiceObj().setText(String.valueOf (typeValue));

      return true ;

      }catch (Exception ex){

      ex.printStackTrace();

      return false ;

      }

      }

      /**

      * @param args

      */

      public static void main(String[] args) {

      Client clt=new Client();

      System.out .println(clt.SetUPSTypeValue(100));

      }

      }

课课家教育

未登录