首页 > 数据库 > 数据库开发技术 > 观察者模式--我通知你与你无关







public interface Subject {void attachObserver(Observer observer);void detachObserver(Observer observer);void notifyObserver();}
import java.util.ArrayList;import java.util.List;public class SalesDataSubject implements Subject{private List<Observer> observers = new ArrayList<Observer>();// 上个月销售额private double lastMonthSales = 90;// 这个月销售额private double thisMonthSales = 100;// 下个月销售额预计private double nextMonthSales = 105;public void attachObserver(Observer observer) {observers.add(observer);}public void detachObserver(Observer observer) {observers.remove(observer);}public void notifyObserver() {for (Observer observer : observers) {observer.update(lastMonthSales, thisMonthSales, nextMonthSales);}}}
public interface Observer {void update(double lastMonthSales, double thisMonthSales, double nextMonthSales);}
public class PcObserver implements Observer{public void update(double lastMonthSales, double thisMonthSales, double nextMonthSales) {System.out.println("PC上显示报表,上个月销售金额:" + lastMonthSales + "万,这个月销售金额:" +thisMonthSales + "万,下个月预计销售金额:" + nextMonthSales + "万");}}
public class IpadObserver implements Observer{public void update(double lastMonthSales, double thisMonthSales, double nextMonthSales) {System.out.println("ipad上显示报表,上个月销售金额:" + lastMonthSales + "万,这个月销售金额:" +thisMonthSales + "万,下个月预计销售金额:" + nextMonthSales + "万");}}
public class MobileObserver implements Observer{public void update(double lastMonthSales, double thisMonthSales, double nextMonthSales) {System.out.println("手机上显示报表,上个月销售金额:" + lastMonthSales + "万,这个月销售金额:" +thisMonthSales + "万,下个月预计销售金额:" + nextMonthSales + "万");}}
public class TestObserver {public static void main(String[] args) {SalesDataSubject SalesDataSubject = new SalesDataSubject();PcObserver pcObserver = new PcObserver();IpadObserver ipadObserver = new IpadObserver();MobileObserver mobileObserver = new MobileObserver();// 添加观察者SalesDataSubject.attachObserver(pcObserver);SalesDataSubject.attachObserver(ipadObserver);SalesDataSubject.attachObserver(mobileObserver);// 通知观察者SalesDataSubject.notifyObserver();// 删除ipad观察者SalesDataSubject.detachObserver(ipadObserver);System.out.println("删除ipad端显示--------");// 通知观察者SalesDataSubject.notifyObserver();}}
PC上显示报表,上个月销售金额:90.0万,这个月销售金额:100.0万,下个月预计销售金额:105.0万ipad上显示报表,上个月销售金额:90.0万,这个月销售金额:100.0万,下个月预计销售金额:105.0万手机上显示报表,上个月销售金额:90.0万,这个月销售金额:100.0万,下个月预计销售金额:105.0万删除ipad端显示--------PC上显示报表,上个月销售金额:90.0万,这个月销售金额:100.0万,下个月预计销售金额:105.0万手机上显示报表,上个月销售金额:90.0万,这个月销售金额:100.0万,下个月预计销售金额:105.0万





原文作者:编程我也会;如有侵权,请联系管理员删除。