zoukankan      html  css  js  c++  java
  • 设计模式 访问者模式

    首先声明一个状态

    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);
    		
    
    	}
    
    }
    
    
  • 相关阅读:
    Django REST framework解析器、渲染器、分页
    微前端qiankun从搭建到部署的实践
    前端开发常用免费资源,显著提升工作效率
    Vue切换页面时碰见过中断axios请求的场景吗?如何中断?
    JavaScript与ES的25个重要知识点!
    电脑端支付宝支付 -前端获取支付宝返回的form 以及submit 调用支付扫码页面
    element ui 分页记忆checked
    通过css改变svg img的颜色
    Howler.js Web音频播放终极解决方案
    5、Redis中对Set类型的操作命令
  • 原文地址:https://www.cnblogs.com/yufenghou/p/6056635.html
Copyright © 2011-2022 走看看