观察者模式的java代码示例
2018-01-26 15:17
253 查看
第一步:先创建一个被观察者接口;
第二步:创建一个观察者接口;
第三步:
第四步:具体观察者
第五步:创建实体类
第六步:测试
/** * <pre> * 被观察者 * </pre> */ public interface MyObserverable { void register(MyObserver myObserver); void remove(MyObserver myObserver); void send(NewsModel newsModel); }
第二步:创建一个观察者接口;
/** * <pre> * 观察者 * </pre> */ public interface MyObserver { void receive(NewsModel newsModel); }
第三步:
/** * <pre> * 具体被观察者,实现了被观察者接口,每隔2s发送一次消息 * </pre> */ public class NewsProvider implements MyObserverable { private static final long DELAY = 2*1000; private List<MyObserver> myObservers; public NewsProvider() { myObservers = new ArrayList<MyObserver>(); generateNews(); } /** * 模拟产生新闻,每2s发送一次 */ private void generateNews() { Timer timer = new Timer(); timer.schedule(new TimerTask() { int titleCount = 1; int contentCount = 1; @Override public void run() { send(new NewsModel("title:" + titleCount++, "content:" + contentCount++)); } }, DELAY, 1000); } @Override public void register(MyObserver myObserver) { if (myObserver == null) { return; } synchronized (this) { if (!myObservers.contains(myObserver)) { myObservers.add(myObserver); } } } @Override public synchronized void remove(MyObserver myObserver) { myObservers.remove(myObserver); } @Override public void send(NewsModel newsModel) { for (MyObserver observer : myObservers) { observer.receive(newsModel); } } }
第四步:具体观察者
/** * <pre> * 观察者的实现类 * </pre> */ public class User implements MyObserver { private String mName; public User(String mName) { this.mName = mName; } @Override public void receive(NewsModel newsModel) { System.out.println(mName + " receive news:" + newsModel.getTitle() + " " + newsModel.getContent()); } }
第五步:创建实体类
public class NewsModel { private String title; private String content; public NewsModel() { } public NewsModel(String title, String content) { this.title = title; this.content = content; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } @Override public String toString() { return "NewsModel [title=" + title + ", content=" + content + "]"; } }
第六步:测试
public static void main(String[] args) { MyObserverable newsProvider = new NewsProvider(); MyObserver user; for (int i = 0; i < 3; i++) { user = new User("user:" + i); newsProvider.register(user); } }
相关文章推荐
- 【设计模式】java单实例模式代码示例
- JAVA中观察者模式示例
- Java用观察者模式重构复杂的业务代码
- 用java代码实现观察者模式
- Java设计模式笔记之抽象工厂代码示例
- JAVA模式 对象池 简要代码示例
- java设计模式示例(含代码)
- 【java】 代理模式代码示例
- Java 设计模式(示例代码)
- Java设计模式:单态模式,工厂模式,代理模式,观察者模式示例
- Java使用观察者模式实现气象局高温预警功能示例
- c++观察者模式代码示例
- Java设计模式及示例代码
- java Signleton模式详解及示例代码
- 观察者模式在Java中的应用,附代码
- Java设计模式之策略模式代码示例
- Java之dao模式详解及代码示例
- 【设计模式】java工厂模式代码示例
- Java使用设计模式中迭代器模式构建项目的代码结构示例
- js或者java设计模式代码示例