观察者模式笔记

在做RecyclerView的item点击监听操作的时候,参考了 泡在网上的日子里的一篇blog,它里面提到了观察者模式,所以就找了相关的内容,记录下自己的一些理解,可能存在某些错误,希望指正。


首先贴出一下部分代码:

public class HomePageAdapter extends RecyclerView.Adapter<HomePageAdapter.MyViewHolder>  {

    private LayoutInflater mLayoutInflater;
    private Context mContext;
    private List<String> mDatas;
    private OnRecyclerViewItemListener mOnRecyclerViewItemListener;

    /**
     * 构造方法
     * @param context
     * @param datas
     */
    public HomePageAdapter(Context context , List<String> datas){

        this.mContext = context;
        this.mDatas = datas;
        mLayoutInflater = LayoutInflater.from(context);
        mOnRecyclerViewItemListener = null;
    }


    /**
     * 创建ViewHolder
     * @param parent
     * @param viewType
     * @return
     */
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = mLayoutInflater.inflate(R.layout.homepage_item , parent , false);
        MyViewHolder myViewHolder = new MyViewHolder(view);



        return myViewHolder;
    }

    /**
     * 绑定ViewHolder
     * @param holder
     * @param position
     */
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {

        holder.textView.setText(mDatas.get(position));
        holder.itemView.setTag(mDatas.get(position));
    }

    @Override
    public int getItemCount() {
        return mDatas.size();
    }



    //定义接口
    public static interface OnRecyclerViewItemListener{

        void onItemClick(View view , int position);
    }

    public void setOnItemClickListener(OnRecyclerViewItemListener listener){
        this.mOnRecyclerViewItemListener = listener;
    }



    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        public TextView textView;

        public MyViewHolder(View itemView) {
            super(itemView);
            textView = (TextView) itemView.findViewById(R.id.homepage_tv_title);
            textView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            if(mOnRecyclerViewItemListener != null){
                mOnRecyclerViewItemListener.onItemClick(v , getLayoutPosition());
            }
        }
    }


}


/**
     * RecyclerView item项点击事件
     */
    private void homepageAdapterClick(){
        //item监听事件
        homePageAdapter.setOnItemClickListener(new HomePageAdapter.OnRecyclerViewItemListener() {
            @Override
            public void onItemClick(View view, int position) {
                startActivity(new Intent(getActivity() , WritingActivity.class));
            }
        });
    }






接下来引用一下概念(来自维基百科)

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

它的结构是:



(其实看到这里,从表现上看我觉得我的那个代码里好像有一点观察者模式的影子,就是我在Adapter里定义一个接口,那么这里就是Subject,里面的接口则是Observer,然后在Activity里去实例化一个mAdapter的时候,那么它就应该是ConcreteSubject了,这时候我通过调用mAdapter里的点击方法,也就应该是相当于ConcreteObserver了。如果我的理解没错的话)


所以它有四个角色:

抽象主题:包含attach(),detach(),notifyObserver()

具体主题:包含getState()和change()

抽象观察者:包含update()

具体观察者:包含update()


因此我觉得应该是将我们的具体观察者attach或detach到实例化的具体主题里,进行所谓的登记。然后当具体主题的对象发生了change的时候,那么就会调用change()方法,继而会通过getState()来判断状态,然后通过notifyObserver()来通知所有的相依的具体观察者。


待续。。。






参考:

维基百科:点击打开链接

《大话设计模式》:老板回来,我不知道——观察者模式

《JAVA与模式》之观察者模式:点击打开链接

  为RecyclerView添加item的点击事件  点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值