• Observer设计模式【利用商品概念解释】


    每个人都想过着富有的生活,这是很正常的。

    这里以开店进货为例。

    在讲之前解释英语单词:

    Observer:查看;遵守

    Observable:可见的,公开的。

    从单词可以知道:商品用来卖,所以公开,继承【extends】了商品的基本属性[Observable].

    对于商品,监管部门要对它实行【implements】监管,让其符合相关法律法规

    package patterns.actions.observer;
    
    import java.util.Observable;
    
    /**
     * 商品要放在柜台上卖,那么它就要接收各种部门检查
     *这里设置:知识产权 和  物价部门
     * @author one
     *
     */
    public class ProductObservable extends Observable {
     
    	public static String productName;
    	public static Float price;
    	
    	public String getProductName() {
    		return productName;
    	}
    	
    	/*
    	 * 商品名称 有时需要更新
    	 * */
    	public void setProductName(String productName) {
    		this.productName = productName;
    		//让知识产权管理部门看看
    		super.setChanged();
    		super.notifyObservers(this.productName);
    	}
    	public Float getPrice() {
    		return price;
    	}
    	
    	/*
    	 * 商品的价格也是要更新
    	 * @param price
    	 */
    	public void setPrice(Float price) {
    		this.price = price;
    		//让物价局来看看
    		super.setChanged();
    		super.notifyObservers(this.price);
    	}
    
    }
    
    package patterns.actions.observer;
    
    import java.util.Observable;
    import java.util.Observer;
    
    public class PriceObserver implements Observer {
    
    	//物价局
    	@Override
    	public void update(Observable o, Object arg) {
    		if(arg==ProductObservable.price){
    			ProductObservable  myProduct =(ProductObservable) o;
    			System.out.println("PriceObserver price changed to "+myProduct.getPrice());
    		}
    
    	}
     
    }
    



     

    package patterns.actions.observer;
    
    import java.util.Observable;
    import java.util.Observer;
    
    public class NameObserver implements Observer {
    
    	//知识产权部门只关心商标名称的改变
    	@Override
    	public void update(Observable o, Object arg) {
    		if(arg==ProductObservable.productName){
    			ProductObservable myProduct=(ProductObservable) o; 
    			System.out.println("NameObserver  name changed to "+myProduct.getProductName());
    		} 
    	}
    
     
    }
    


    开店的基本过程设置好了,那么就开店吧。

    package patterns.actions.observer;
    
    /**
     * 开店了
     * @author one
     *
     */
    public class Test {
     
    	public static void main(String[] args) {
    		//商店来了一批商品
    		ProductObservable product=new ProductObservable();
    		//在上架之前,要经过部门审查,要有执照才能用。
    		product.addObserver(new NameObserver());
    		product.addObserver(new PriceObserver());
    		
    		//好了,拿到商品销售执照,可以上架了。
    		product.setPrice(100.0f);
    		product.setProductName("Beer");
    	}
    
    }
    


    商品上架符合规则,所以监管部门都通过了,得出结果为:

    PriceObserver price changed to 100.0
    NameObserver  name changed to Beer
    


    好了,其实有时写程序,所谓的架构,也是来源于生活。

  • 相关阅读:
    js中cookie的操作
    javascript HTML静态页面传值的四种方法
    更改ligerui源码实现分页样式修改
    javascript Date format(js日期格式化)
    LigerUI用PostGetAjax前后台交互方式的写法
    html中 accept 属性
    jQuery.ajax() 设置 Headers 中的 Accept 内容
    C# 事件(Event)
    C# 委托(Delegate)
    C# 反射(Reflection)
  • 原文地址:https://www.cnblogs.com/james1207/p/3295337.html
Copyright © 2020-2023  润新知