zoukankan      html  css  js  c++  java
  • 设计模式读书笔记-----访问者模式DEMO修改

    读访问者模式资料:http://blog.csdn.net/chenssy/article/details/12029633

    直觉这写法有问题。访问的应该是药单,而不是药,特改写如下:

    public abstract class Visitor {
    	protected String name;
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public abstract void visitor(Presciption p);
    }
    
    public class Charger extends Visitor{
    	public void visitor(Presciption p) {
    		for(Medicine m : p.list){
    			System.out.println("划价员:" + name + "给药" + m.getName() + "划价:" + m.getPrice());
    		}
    	}
    }
    
    public class WorkerOfPharmacy extends Visitor{
    	public void visitor(Presciption p) {
    		for(Medicine m : p.list){
    			System.out.println("药房工作者:" + name + "拿药 :" + m.getName());
    		}
    	}
    
    	/*public void visitor(MedicineB b) {
    		System.out.println("药房工作者:" + name + "拿药 :" + b.getName());
    	}*/
    }
    
    public class Medicine {
    	protected String name;
    	protected double price;
    
    	public Medicine(String name, double price) {
    		this.name = name;
    		this.price = price;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public double getPrice() {
    		return price;
    	}
    
    	public void setPrice(double price) {
    		this.price = price;
    	}
    
    	//public abstract void accept(Visitor visitor);
    }
    

      

    public class MedicineA extends Medicine{
    	public MedicineA(String name, double price) {
    		super(name, price);
    	}
    }
    

      

    public class MedicineB extends Medicine {
    	public MedicineB(String name, double price) {  
            super(name, price);  
        }
    }
    

      

    public class Presciption {
    	List<Medicine> list = new ArrayList<Medicine>();  
        
        public void accept(Visitor visitor){
        	visitor.visitor(this);
        }
          
        public void addMedicine(Medicine medicine){  
            list.add(medicine);  
        }  
          
        public void removeMedicien(Medicine medicine){  
            list.remove(medicine);  
        }  
    }
    

      

    public class Client {
    	public static void main(String[] args) {
    		Medicine a = new MedicineA("板蓝根", 11.0);
    		Medicine b = new MedicineB("感康", 14.3);
    
    		Presciption presciption = new Presciption();
    		presciption.addMedicine(a);
    		presciption.addMedicine(b);
    
    		Visitor charger = new Charger();
    		charger.setName("张三");
    
    		Visitor workerOfPharmacy = new WorkerOfPharmacy();
    		workerOfPharmacy.setName("李四");
    
    		presciption.accept(charger);
    		System.out.println("-------------------------------------");
    		presciption.accept(workerOfPharmacy);
    	}
    }
    

      

  • 相关阅读:
    (七)策略模式详解
    (六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
    递归锁,死锁,使用递归锁解决死锁,信号量
    并发编程中的GIL锁(全局解释器锁)自己理解的他为啥存在
    线程了解以及创建线程的Threading模块中的部分方法
    进程 >> 互斥锁、队列与管道、生产者消费者模型
    进程比较基础的内容
    基于UDP协议的socket套接字编程 基于socketserver实现并发的socket编程
    网络基础 + 简易服务端和客户端
    单例模式
  • 原文地址:https://www.cnblogs.com/yufan27209/p/6972827.html
Copyright © 2011-2022 走看看