java设计模式之观察者模式

最近在学习下设计模式,而加深学习的不错的方法就是把心得写出来吧。


        观察者<Observer>模式是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。

          

        看下结构图:


 开始一个小例子

TheObserver<观察者>接口:

    public interface TheObserver {  
        void getNewPaper();  
    }  


实现TheObserver接口的观察者:

个人订阅者:
    public class PersonalSubscriber implements TheObserver{  
        private String strName;  
          
        public void setNewsPaperName(String strName){  
            this.strName = strName;  
        }  
          
        public String getNewsPaperName(){  
            return strName;  
        }  
      
        @Override  
        public void getNewPaper() {  
            // TODO Auto-generated method stub  
            System.out.println("我是个人用户,我得到了我的报纸:"+getNewsPaperName());  
        }  
      
    }  


企业订阅者:
    public class EnterpriseSubscriber implements TheObserver{  
        private String strName;  
          
        public void setNewsPaperName(String strName){  
            this.strName = strName;  
        }  
          
        public String getNewsPaperName(){  
            return strName;  
        }  
        @Override  
        public void getNewPaper() {  
            // TODO Auto-generated method stub  
            System.out.println("我是企业用户,我得到了我的报纸:"+getNewsPaperName());  
        }  
      
    }  


被观察者:TheObserved
    public abstract class TheObserved{   
        public List<TheObserved> list;  
        public Publish(){  
            list = new ArrayList();  
        }  
          
        public void registered(TheObserver theObserver){  
            list.add(theObserver);  
        }  
          
        public void unregistered(TheObserver theObserver){  
            list.remove(theObserver);  
        }  
          
        public abstract void sendNewsPaper();  
    }  


这里使用的是抽象类

下面是实现:
    public class PostOffice extends Publish{  
      
        @Override  
        public void sendNewsPaper() {  
            // TODO Auto-generated method stub  
            Iterator iterator = list.iterator();  
            while(iterator.hasNext()){  
                ((ISubscribe) iterator.next()).getNewPaper();  
            }  
        }  
          
    }  


测试:
    public static void main(String[] args) {  
            // TODO Auto-generated method stub  
            PostOffice postOffice = new PostOffice();  
              
            //得到个人用户  
            PersonalSubscriber person = new PersonalSubscriber();  
            person.setNewsPaperName("《南方周末》");  
            //得到企业用户  
            EnterpriseSubscriber enterprise = new EnterpriseSubscriber();  
            enterprise.setNewsPaperName("《企业报》");  
              
            //注册观察者  
            postOffice.registered(person);  
            postOffice.registered(enterprise);  
              
            //发放报纸  
            postOffice.sendNewsPaper();  
        }  


测试结果:

    我是个人用户,我得到了我的报纸:《南方周末》  
    我是企业用户,我得到了我的报纸:《企业报》  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值