模板设计模式

一、概念

      定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

要点:

  1. 必须有继承,父类一般都是流程和通用部分的封装,子类一般都是具体的功能实现。
  2. 例子:银行办理业务:1.领号 2、填写信息(可以填自己的,可以填别人的(这部分呢就相当于模板设计模式))3.排队 4、办理

二、实例

      Okhttp等

三、源码中的模板设计模式(重点)

      1.activity的生命周期采用了什么设计模式?(模板)
解析:都是继承AppCompatActvity,而自己定义的所有activity的生命周期的流程都是一样的.
oncreate(0àonstart()àonresume()àonpause()—)onstop()àondestory()。每个activity可以自己设计不同的界面,可以实现自己的具体逻辑交互。

    2.AsyncTask();异步、线程池 ---------使用方式:

A a = new A();

a.execute;(在线程池中执行。)


Class A extends Async Task<Void,Integer,String>{

     

      //执行耗时操作,开辟子线程

      @override

      Protected String doInBackgroud(Void….params){

      Return null;

}


      //执行完之后,返回子线程

      @override

      Procted vpid onprostExecute(String s){

Super.onPostExecute(s);

}

}

   3.自定部分的view的部分:view调用的draw(),

四、 开发中的BaseActivity

OnCreate():{

      //要写的流程差不多i
      1.设置布局

setContentView();
      2.初始化View;

initVie我();

3.初始化Title

InitTitle();

4.访问接口数据

   InitData();

      //同时写可以写入一些公用的方法。例如:ButterKnife注解,同意管理activity等。

           

Public abstart setContentView();

……;

Protected boolean testFlag(){

      Return true;

}

//在基类中不建议写很多的方法,可能会导致性能问题。

子类继承之后,可以做一个判断。该判断就是勾子

钩子:模板设计模式用来控制父类的流程

            插件化开发,拦截一个流程

五、OK HTTP的Dispatcher(线程池)

      疑问;线程池好处?

      例如:获取图片,图片联网下载,100张图片,要开100个线程,线程开得太多会影响效率和吞吐量。

讲解:

线程执行时间:
T = T1(线程创建时间)+T2(run方法执行时间)+T3(线程的销毁时间)
因此,当线程多次创建的时候,T1\T3的时间就要多,那么就会影响效率。
线程池:解决线程反复创建和销毁的问题,做到线程可以复用。

线程池的线程会不断的到缓存队列中去内容,但有一个时间限制,如果缓存队列中没有内容,那么超过时间的 话就会销毁。

如果线程池中的线程都销毁了,那么缓存队列中又出现了新的内容,那么线程池会创建新的线程。

 

//反例:创建多个线程。

Public class thread Pool Test{

      Psvm(String[] args){\

      For(int I =0;i<100;i++){

            New thread(new runnable(){

                  @override

                  Public void run(){

                       Thread.sleep(100);

                       System.out.println(“下载图片显示完毕”)


}

     

});

}

}

}

正例:

threadPoolExecutor th = new ThreadPoolExecutor(

 核心线程数,最大线程数,线程存活时间,线程存活时间的单位,缓存队列(线程队列),线程创建工厂(需要线程的话,就会调用newThread来创建。));

AsyncTask存在的隐患:

比如我要执行200 Runnable 就肯定会报错

线程队列是4,核心线程数也是3,最大线程数是10,目前加入的runnable有20个,但此时线程队列是3,还有16个没有地方放,这个时候我们最大线程数是10,那么此时就会从16个中拿6个出来,那么线程池就会在创建6个线程,但此时还有10个runnable没有办法执行,就会抛异常。

Queue的参数
blockingQueue;先进先出的队列

SynchronouseQueue:线程安全队列,它里面是没有固定的缓存(okhttp使用)。什么意思:拿的时候不知道拿哪个,只有拿到的时候才知道

priorityBlockQueue:无序的,可以根据优先级进行排序。怎么排序?

指令的对象要实现Comparable作比较。

)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Abednego_子瑜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值