Observer Pattern(观察者模式):顾名思义,就是只要某个事物有的行为有了变化,则会影响所有关注这个事物的事物。 举个实际例子,现如今比较受欢迎的明星光头强,他有自己的微博账号、也有自己的一些粉丝,每当强哥微博上有啥(砍砍树 啊、被熊大熊二扁啊等等)新闻,这些关注了强哥的粉丝都会第一时间收到通知,然后去给环保部门打电话。这就是一个典型 的观察者模式。
*********************************************
package com.cupid.Pattern.Observer; /** * @Author: cupid * Created by Cupid520 on 2018/2/23. * @Description: 熊类的基础接口 */ public interface BaseBear { public void catchUp(); }
*********************************************
package com.cupid.Pattern.Observer; /** * @Author: cupid * Created by Cupid520 on 2018/2/23. * @Description: 熊大 */ public class BigBear implements BaseBear{ @Override public void catchUp() { System.out.println("收到通知 :熊大 跑着去 环保局 举报强哥砍树"); } }
package com.cupid.Pattern.Observer; /** * @Author: cupid * Created by Cupid520 on 2018/2/23. * @Description: */ public class BearTwo implements BaseBear{ @Override public void catchUp() { System.out.println("收到通知 : 熊二 去追赶 强哥"); } }*****************************************************
package com.cupid.Pattern.Observer; /** * @Author: cupid * Created by Cupid520 on 2018/2/23. * @Description: 强哥基类 */ public interface BaseLightHead<T> { public void addMember(T t); public void removeMember(T t); public void callBear(); public void personAction(); }********************************************************
package com.cupid.Pattern.Observer; import com.cupid.Pattern.Adapter.ObjectAdapter; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; /** * @Author: cupid * Created by Cupid520 on 2018/2/23. * @Description: 强哥实体类 */ public class LightHead implements BaseLightHead<BaseBear>{ private List<BaseBear> list = Collections.synchronizedList(new LinkedList<BaseBear>()); @Override public void addMember(BaseBear baseBear) { if(!list.contains(baseBear)){ list.add(baseBear); } } @Override public void removeMember(BaseBear baseBear) { if(list.contains(baseBear)){ list.remove(baseBear); } } @Override public void callBear() { //通知每个关注者 for(BaseBear bear : list){ bear.catchUp(); } } @Override public void personAction() { //明星更新微博了 System.out.println("强哥俺要去砍树了......发出通知"); //通知粉丝,明星微博change callBear(); } }
***********************************************************
package com.cupid.Pattern.Observer; /** * @Author: cupid * Created by Cupid520 on 2018/2/23. * @Description: */ public class MainTest{ public static void main(String[] args) { LightHead lightHead = new LightHead(); lightHead.addMember(new BigBear()); lightHead.addMember(new BearTwo()); lightHead.personAction(); } }
**************************************************************
测试结果:
强哥俺要去砍树了......发出通知
收到通知 :熊大 跑着去 环保局 举报强哥砍树
收到通知 : 熊二 去追赶 强哥