java设计模式之-----观察者模式

   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();
    }
}

    **************************************************************

测试结果:

强哥俺要去砍树了......发出通知
收到通知 :熊大 跑着去 环保局 举报强哥砍树
收到通知 : 熊二 去追赶 强哥

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值