模板方法模式

模板方法模式

模板方法模式说的通俗点就是代码的复用,也就是通过子类继承父类,然后实现父类的方法(父类中的方法可以是空实现,也可以是一个抽象方法),然后在之类实现的方法中可以定义许多自定义的实现,父类可以通过这个方法来调用子类中的这个方法的实现。

就比如今天有人问到我一个问题:他说要通过监听网络的变化,然后通知所有界面现在网络的状态,没有网络的时候就显示无网络连接这样的需求。看看他的问题啊

就像网易云音乐”APP软件一样。首先分为三种情况:

第一中:在没有网络的情况下点击应用程序出现下面的界面--->


第二种:有网络状态下点击应用程序APP会出现--->


第三种:当已经进入到首页,这是用户手动把网络给关掉,或者断网,这是自动跳转到--->


第四种:用户手动开启网络或者网络又成功连接上了,这是会自动从无网络页面跳转到--->


对于这样的要求,那么你首先要想到的事就是肯定要通过使用一个公共的父类来通过模板方法实现这个功能。

说下实现的步骤啊:

1、         创建一个父类,里边写一个BroadCastReceiver的内部类,然后监听网络变化

2、         在父类中实现一个抽象的方法或是一个空实现的方法来控制在网络变化时候进行相应的改变的方法

3、         监听网络变化以后父类中调用子类实现父类的方法的实现。

下边来看看代码

父类:
packagecom.example.modifyprogress;
 
importandroid.app.Activity;
import android.content.BroadcastReceiver;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.net.ConnectivityManager;
importandroid.os.Bundle;
 
public abstract classBaseActivity extends Activity{
    @Override
    protected voidonCreate(Bundle savedInstanceState) {
        // TODOAuto-generated method stub
        super.onCreate(savedInstanceState);
    }
   
    int FLAG_DISCONNECT = 2;//断开
    int FLAG_CONNECTED = 0; //已连接
    //這個用來接受你你网络变化
        classNetWorkReceiver  extendsBroadcastReceiver{
 
            @Override
            public voidonReceive(Context context, Intent intent) {
                //当网络变化出现了问题
                String action =intent.getAction();
                int flag= -1;
                if(action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
                    //通过判断进行相应的赋值
                /*  if ("网络不可用") {
                        flag = FLAG_DISCONNECT;
                    }else if ("网络连接了"){
                         flag = FLAG_CONNECTED;
                    }*/
                    init(flag);
                    change(flag);//父类在接收到改变以后调用之类的实现
                }
               
            }
           
        }
        //如果用抽象方法的话子类是必须实现父类的这个方法的,但是空方法的话,子类可以有选择的实现
        public void init(int flag) {
        }
        abstract void change(int flag);
}
然后是子类的实现:
packagecom.example.modifyprogress;
 
importandroid.app.Activity;
 
public classSecondActivity extends BaseActivity{
 
    @Override
    protected voidonChildTitleChanged(Activity childActivity,
            CharSequence title) {
        // TODOAuto-generated method stub
        super.onChildTitleChanged(childActivity,title);
    }
 
    @Override
    void change(int flag) {
        System.out.println("网络发生了改变");
       
    }
 
   
    @Override
    public void init(int flag) {
        // TODOAuto-generated method stub
        super.init(flag);
        System.out.println("网络发生了改变=====");
    }
}


 

这个时候Activity这个界面的通知应该就能做到了,那么Fragment呢,

熟悉Android的人应知道,Fragment是必须依赖于一个Activity的,那么Activity知道了以后,通知Fragment应该就不难了吧。

总结

通过模板方法的分析可以发现,模板方法是使用继承来改变算法的其中一部分,而且通过分析模板方法对于学习源码框架也是有一定的帮助的。

分享一个大神写的关于模板方法模式的文章:

http://mobile.51cto.com/ahot-418992.htm

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值