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 {//物价局@Overridepublic 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 {//知识产权部门只关心商标名称的改变@Overridepublic 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.0NameObserver name changed to Beer
好了,其实有时写程序,所谓的架构,也是来源于生活。