观察者模式UML图与源代码
以下是UML图(注:Obsever接口,Observable类是java.util包下文件):
源代码:Product
import java.util.Observable;
public class Product extends Observable{
private String nameString;
private double price;
public Product(String nameString, double price) {
super();
this.nameString = nameString;
this.price = price;
}
public void setNameString(String nameString) {
if(!this.nameString.equals(nameString)){
this.nameString = nameString;
setChanged();
}
//Observable的方法
notifyObservers(nameString);
}
public void setPrice(double price) {
if (this.price!=price) {
this.price = price;
setChanged();
}
notifyObservers(price);
}
}
NameObserver类:
import java.util.Observable;
import java.util.Observer;
public class NameObserver implements Observer {
public void update(Observable arg0, Object arg1) {
if (arg1 instanceof String) {
System.out.println("观察物" + arg0 + "的名称改为:" + arg1);
}
}
}
PriceObserver类:
import java.util.Observable;
import java.util.Observer;
public class PriceObserver implements Observer {
public void update(Observable arg0, Object arg1) {
if (arg1 instanceof Double) {
System.out.println("观察物"+arg0+"的价格变化为"+arg1);
}
}
}
Client类:
public class Client {
public static void main(String[] args) {
Product product = new Product("电脑", 2000);
PriceObserver priceObserver = new PriceObserver();
NameObserver nameObserver = new NameObserver();
product.addObserver(nameObserver);
product.addObserver(priceObserver);
product.setNameString("笔记本电脑");
product.setPrice(5000);
}
}
运行结果截图: