• 访问者模式


    设计模式的意义在于:面向业务内容、业务数据结构和系统架构,高内聚低耦合、优雅的将平面逻辑立体化。

      1 package designPattern;
      2 import java.util.ArrayList;
      3 import java.util.Collection;
      4 import java.util.Iterator;
      5 import java.util.List;
      6 /**
      7  * 访问者模式
      8  * @author Administrator
      9  */
     10 public class C25_VisitorTest {
     11 
     12     /**
     13      * 表示一个作用于某对象结构中的各元素的操作。
     14      * 它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
     15      * 适用于:
     16      * 1.一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。
     17      * 2.需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。
     18      * Visitor使得你可以将相关的操作集中起来定义在一个类中。
     19      * 当该对象结构被很多应用共享时,用Visitor模式让每个应用仅包含需要用到的操作。
     20      * 3.定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。
     21      * 改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。
     22      * 如果对象结构类经常改变,那么可能还是在这些类中定义这些操作较好。
     23      */
     24     @SuppressWarnings({ "rawtypes", "unchecked" })
     25     public static void main(String[] args) {
     26         Visitor visitor = new ConcreteVisitor();
     27         StringElement se = new StringElement("abc");
     28         se.accept(visitor);
     29         
     30         FloatElement fe = new FloatElement(new Float(1.5));
     31         fe.accept(visitor);
     32         System.out.println("===========");
     33         List result = new ArrayList();
     34         result.add(new StringElement("abc"));
     35         result.add(new StringElement("abc"));
     36         result.add(new StringElement("abc"));
     37         result.add(new FloatElement(new Float(1.5)));
     38         result.add(new FloatElement(new Float(1.5)));
     39         result.add(new FloatElement(new Float(1.5)));
     40         visitor.visitCollection(result);
     41     }
     42 }
     43 //visitor
     44 interface Visitor {
     45 
     46     public void visitString(StringElement stringE);
     47     
     48     public void visitFloat(FloatElement floatE);
     49     
     50     public void visitCollection(@SuppressWarnings("rawtypes") Collection collection); 
     51 }
     52 //concreteVisitor
     53 class ConcreteVisitor implements Visitor {
     54 
     55     public void visitCollection(@SuppressWarnings("rawtypes") Collection collection) {
     56         // TODO Auto-generated method stub
     57         @SuppressWarnings("rawtypes")
     58         Iterator iterator = collection.iterator();
     59         while (iterator.hasNext()) {
     60             Object o = iterator.next();
     61             if (o instanceof Visitable) {
     62                 ((Visitable)o).accept(this);
     63             }
     64         }
     65     }
     66     public void visitFloat(FloatElement floatE) {
     67         System.out.println(floatE.getFe());
     68     }
     69 
     70     public void visitString(StringElement stringE) {
     71         System.out.println(stringE.getSe());
     72     }
     73 }
     74 //element
     75 interface Visitable {
     76 
     77     public void accept(Visitor visitor);
     78 }
     79 //concreteElement
     80 class FloatElement implements Visitable {
     81 
     82     private Float fe;
     83     
     84     public FloatElement(Float fe) {
     85         this.fe = fe;
     86     }
     87     
     88     public Float getFe() {
     89         return this.fe;
     90     }
     91     
     92     public void accept(Visitor visitor) {
     93         visitor.visitFloat(this);
     94     }
     95 }
     96 class StringElement implements Visitable {
     97 
     98     private String se;
     99     
    100     public StringElement(String se) {
    101         this.se = se;
    102     }
    103     
    104     public String getSe() {
    105         return this.se;
    106     }
    107     
    108     public void accept(Visitor visitor) {
    109         visitor.visitString(this);
    110     }
    111 }

    环境:JDK1.6,MAVEN,tomcat,eclipse

    源码地址:http://files.cnblogs.com/files/xiluhua/designPattern.rar

    欢迎亲们评论指教。

  • 相关阅读:
    ModuleNotFoundError: No module named '_ctypes' make: *** [install] 错误 1
    Python安装常见问题:ModuleNotFoundError: No module named '_ctypes' 解决办法
    No module named 'requests'
    python 安装bs4
    python 判断字符串中是否包含数字
    python lambda与zip 组合使用
    Python 从两个List构造Dict
    针对led显示图案的设计工具,画出图案后,可以导出点阵的16进制数组
    支付宝接口:系统有点忙,一会再试试
    urllib.error.URLError: urlopen error SSL: CERTIFICATE_VERIFY_FAILED certificate verify failed
  • 原文地址:https://www.cnblogs.com/xiluhua/p/4413842.html
Copyright © 2020-2023  润新知