• java设计模式:观察者模式


    package Observer;
    
    public class Test {
    
    	/**
    	 * client测试类别
    	 * 观察者模式一般由四部分组成:
    	 * 1摘要观察员(教科书被称为一般“Subject(抽象类的主题)”),
    	 * 里面一般定义了抽象的add(),remove(),notifyAll()等方法,
    	 * 分别用于添加观察者,删除观察者,通知观察者自己的变化。
    	 * 2详细的被观察者类(一般教材上都叫做“ConcreteSubject(详细的主题类)”),
    	 * 是抽象的被观察者(Subject)的详细的实现类,里面实现了add(),remove(),notifyAll()等方法;
    	 * 3抽象的观察者类(一般教材上叫做“Observer”),里面一般定义了一个抽象的update()方法。
    	 * 4详细的观察者类(一般教材上叫做“ConcreteObserver”),他是抽象的观察者类(Observer)的详细实现,它实现了update()方法,
    	 * 用于接受被观察者的详细变化;
    	 * 
    	 * 这里有个样例:有两个被观察者陈美嘉和胡一菲,他们分别有不同的观察者。陈美嘉的观察者有吕小布,
    	 * 胡一菲的观察者有曾贤儿和张伟两个,当陈美嘉和胡一菲有什么变化时,立即就会分别被他们的观察者说知道;
    	 * @author wl
    	 */
    	public static void main(String[] args) {
    		Watched HuYiFei=new ConcerteWatched();
    		Watched ChenMeiJia=new ConcerteWatched();
    		
    		Watcher LvXiaoBu=new ConcreteWatcher("吕小布","陈美嘉");
    		Watcher ZengXianEr=new ConcreteWatcher("曾贤儿","胡一菲");
    		Watcher ZhangWei=new ConcreteWatcher("张伟","女神");
    		
    		ChenMeiJia.addWatcher(LvXiaoBu);
    		HuYiFei.addWatcher(ZengXianEr);
    		HuYiFei.addWatcher(ZhangWei);
    		
    		HuYiFei.notifyWatchers("好想看电影啊!

    。!

    "); ChenMeiJia.notifyWatchers("好想去旅游啊!!!"); } }

    
    
    package Observer;
    /**
     * 抽象的观察者接口类
     * @author wl
     *
     */
    public interface Watcher {
    	void updata(String str);
    }
    
    package Observer;
    /**
     * 抽象的被观察者接口
     * @author wl
     *
     */
    public interface Watched {
    	void addWatcher(Watcher watcher);
    	void removeWatcher(Watcher watcher);
    	void notifyWatchers(String str);
    }
    
    package Observer;
    /**
     * 详细的观察者类,比方样例中的吕小布。曾贤儿,张伟就是观察者的实例
     * @author wl
     *
     */
    public class ConcreteWatcher implements Watcher {
    	String watcheredName;
    	String name;
    	
    	public ConcreteWatcher(String name,String watcheredName){
    		this.name=name;
    		this.watcheredName=watcheredName;
    	}
    	@Override
    	public void updata(String str) {
    		System.out.println(name+"心里暗暗高兴“嘿嘿!!。机会来了,我的"+watcheredName+"说她 ‘"+str+"’”");
    	}
    
    }
    
    package Observer;
    
    import java.util.ArrayList;
    import java.util.List;
    /**
     * 详细的被观察者类,比方样例中的胡一菲,陈美嘉就是详细的被观察者的实例
     * @author wl
     *
     */
    public class ConcerteWatched implements Watched {
    	List<Watcher> list=new ArrayList<Watcher>();
    	
    	@Override
    	public void addWatcher(Watcher watcher) {
    		list.add(watcher);
    	}
    
    	@Override
    	public void removeWatcher(Watcher watcher) {
    		list.remove(watcher);
    	}
    
    	@Override
    	public void notifyWatchers(String str) {
    		for(Watcher watcher:list){
    			watcher.updata(str);
    		}
    	}
    
    }
    

    输出为:

    曾贤儿心里暗暗高兴“嘿嘿!!

    机会来了,我的胡一菲说她 ‘好想看电影啊!

    !!’”
    张伟心里暗暗高兴“嘿嘿!

    !!

    机会来了,我的女神说她 ‘好想看电影啊!!。’”
    吕小布心里暗暗高兴“嘿嘿!

    。一个偶然的机会,我的陈女士说,她 ‘好想去旅游啊!!!’”

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    在IDEA上本地更新同步Git中的更改
    protobuf的序列化和反序列化
    关于Pytorch报警告:Warning: indexing with dtype torch.uint8 is now deprecated, please use a dtype torch.bool instead
    990. 等式方程的可满足性
    死锁
    事务隔离
    Lab-1
    软件测试homework3
    TCP/UDP网络连接的固定写法
    软件测试Homework 2
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4682754.html
Copyright © 2020-2023  润新知