• 设计模式 访问者模式


    首先声明一个状态

    package action;
    
    import Person.Man;
    import Person.Woman;
    
    public abstract class Action {
    	public abstract void GetManConclusion(Man concreteElementA);
    	public abstract void GetWomanConclusion(Woman concreteElementB);
    }
    
    

    然后写两个具体的状态

    package action;
    import Person.Man;
    import Person.Woman;
    
    public class Failing extends Action {
    
    	@Override
    	public void GetManConclusion(Man concreteElementA) {
    		// TODO Auto-generated method stub
    		System.out.println(concreteElementA.toString()+this.getClass()+"时,喝酒");
    
    	}
    
    	@Override
    	public void GetWomanConclusion(Woman concreteElementB) {
    		// TODO Auto-generated method stub
    		System.out.println(concreteElementB.toString()+this.getClass()+"时,拍a");
    
    	}
    
    }
    
    
    package action;
    import Person.Man;
    import Person.Woman;
    
    public class Success extends Action {
    
    	@Override
    	public void GetManConclusion(Man concreteElementA) {
    		// TODO Auto-generated method stub
    		System.out.println(concreteElementA.toString()+this.getClass()+"时,背后多半有一个伟大的女人");
    
    	}
    
    	@Override
    	public void GetWomanConclusion(Woman concreteElementB) {
    		// TODO Auto-generated method stub
    		System.out.println(concreteElementB.toString()+this.getClass()+"时,背后多半有一个不成功的男人");
    
    	}
    
    }
    
    

    再写Person类

    package Person;
    import action.Action;
    
    public abstract class Person {
    
    
    	public abstract void Accept(Action visitor);
    	
    	
    }
    
    

    man

    package Person;
    import action.Action;
    
    public class Man extends Person {
    
    	@Override
    	public void Accept(Action visitor) {
    		// TODO Auto-generated method stub
    		visitor.GetManConclusion(this);
    	}
    
    
    }
    
    

    woman

    package Person;
    import action.Action;
    
    public class Woman extends Person {
    
    	@Override
    	public void Accept(Action visitor) {
    		// TODO Auto-generated method stub
    		visitor.GetWomanConclusion(this);
    	}
    
    
    
    }
    
    

    写一个结构作为访问

    package struct;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import Person.Person;
    import action.Action;
    
    public class ObjectStructure {
    
    	private List<Person> elements = new ArrayList<Person>();
    	
    	public void Attach(Person element)
    	{
    		elements.add(element);
    	}
    	
    	public void Detach(Person element)
    	{
    		elements.remove(element);
    	}
    	
    	public void Display(Action visitor)
    	{
    		for (Person person : elements) {
    			person.Accept(visitor);
    		}
    	}
    }
    
    

    最后写测试类

    import java.util.ArrayList;
    import java.util.List;
    
    import Person.Man;
    import Person.Person;
    import Person.Woman;
    import action.Failing;
    import action.Success;
    import struct.ObjectStructure;
    
    public class Program {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		ObjectStructure objectStructure = new ObjectStructure();
    		objectStructure.Attach(new Man());
    		objectStructure.Attach(new Woman());
    		
    		Success v1=new Success();
    		objectStructure.Display(v1);
    		
    		Failing v2=new Failing();
    		objectStructure.Display(v2);
    		
    
    	}
    
    }
    
    
  • 相关阅读:
    Process Stats:了解你的APP怎样使用内存
    具体分析死锁产生的条件与原因
    ABAP 弹出框 函数
    mybatis--foreach,choose 小结
    Nginx 配置 Basic 认证
    spss logistic回归分析结果如何分析
    spss logistic回归分析结果如何分析
    样本方差的抽样分布 χ2(n) 卡方分布_样本方差 卡方分布
    样本方差的抽样分布 χ2(n) 卡方分布_样本方差 卡方分布
    t检验中的t值和p值是什么关系_t检验和p值的关系
  • 原文地址:https://www.cnblogs.com/yufenghou/p/6056635.html
Copyright © 2020-2023  润新知