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


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

原文地址:https://www.cnblogs.com/james1207/p/3295337.html