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

观察者模式,顾名思义,监视模式,比如xxlistener  ,常用于 监听事件,消息通知等场合;

 

现在做个简单的例子:

用户1  --------->观察者1

用户2  --------->观察者2

用户3  --------->观察者3

微信公众号1  --------->被观察者1

微信公众号2  --------->被观察者2

 

用户1订阅了公众号1和2

用户2订阅了公众号2

用户3订阅了公众号1

微信公众号则根据订阅用户发送消息

 

观察者和被观察者可以抽象成一个接口(建议不要用类,拓展性不好),然后由具体的观察者和被观察者去实现对应的方法

观察者需要有一个能够接收消息的方法

被观察者需要有:增加观察者。删除观察者,发送消息的方法

 

用代码实践一下:

定义观察者接口

public interface Gcz{

   void  updateMessage(String appname,String message);

}

定义被观察者接口

public interface Bgcz{

//定义观察者集合,根据集合成员发送消息

private List<Gcz> gczList = new ArrayList<Gcz>();

  void addGcz(Gcz gcz);

  void removeGcz(Gcz gcz);

  void sendMessage(String message);

}

//定义观察者1

public class  Gcz1 implements Gcz{

private String name = "gcz1";

 @Override

public void  updateMessage(String appname,String message){

    System.out.println(appname+":"+name+",您有新消息:"+message);

}

}

//定义观察者2

public class Gcz2 implements Gcz{

private String name = "gcz2";

  @Override

 public void updateMessage(String appname,String message){

    System.out.println(appname+":"+name+",您有新消息:"+message);

}

}

//定义观察者3

public class Gcz3 implements Gcz{

private String name = "gcz3";

 @Override

  public void updateMessage(String appname,String message){

    System.out.println(appname+":"+name+",您有新消息:"+message);

}

}
 

//定义被观察者1

public class Bgcz1 implements Bgcz{

private String appname = "微信公众号1";

  private List<Gcz> gczList = new ArrayList<Gcz>();

   @Override

   public void addGcz(Gcz gcz){

    if(!gczList.contains(gcz)){

         gczList.add(gcz);

}

}

@Override

  public void removeGcz(Gcz gcz){

   if(gczList.contains(gcz)){

        gczList.remove(gcz);

}

}

@Override

public void sendMessage(String message){

     for(Gcz gcz2 : gczList){

     gcz2.updateMessage(appname,message);

}

}

 

}

//定义被观察者2

public class Bgcz2 implements Bgcz{

private String appname="微信公众号2";

     private List<Gcz> gczList = new ArrayList<Gcz>();

 

@Override

  public void addGcz(Gcz gcz){

     if(!gczList.contains(gcz)){

           gczList.add(gcz);

}

}

  @Override

    public void removeGcz(Gcz gcz){

         if(gczList.contains(gcz)){

              gcz.remove(gcz);

}

}

 

@Override

public void sendMessage(String message){

         for(Gcz gcz2 : gczList){

            gcz2.updateMessage(appname,message);

}

}

}

//测试

Gcz gcz1 = new Gcz1();//定义具体观察者1

Gcz gcz2 = new Gcz2();//定义具体观察者2

Gcz gcz3 = new Gcz3();//定义具体观察者3

 

Bgcz bgcz1 = new Bgcz1();//定义被观察者1

Bgcz bgcz2 = new Bgcz2();//定义被观察者2

 

//给被观察者1 增加 观察者1和观察者2

bgcz1.add(gcz1);

bgcz1.add(gcz2);

//给被观察者2 增加 观察者1

bgcz2.add(gcz1);

 

bgcz1.sendMessage("开始跑起来了。。。");

bgcz2.sendMessage("第二个也运行起来了");

 

结果:

微信公众号1:gcz1,您有新消息:开始跑起来了。。。

微信公众号1:gcz2,您有新消息:开始跑起来了。。。

微信公众号2:gcz3,您有新消息:第二个也运行起来了

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值