1.设计原则
3.设计原则
1.开闭原则。模板方法需要注意两点:
1.模板方法不能被子类修改,必须使用父类的骨架算法,所有在daylife方法面前定义了final,禁止之类修改。
2.由子类实现的抽象方法,需要定义为protected abstract。使数据不被外部对象恶意访问及错误使用。
2.好莱坞原则---“不要打电话给我们,我们会打电话通知你”。由父类完全控制子类的处理逻辑,子类可以实现父类的可变部分,但是却继承父类的逻辑。不能改变业务逻辑。
4.使用场合
1.一次性实现一个算法不变的部分,并将可变部分留给子类
2.各类中有公共行为的适合,而把公共部分提取出来,集中到一个公共父类中以避免代码重复。
5.java SDK中的模板方法
在java中java.util.Arrays数组中的sort排序方法就是典型的模板方法。
6.android中使用的模板方法
1.view 的Draw方法就是使用的模板方法模式:
在draw方法中,定义了主要的算法骨架,onDraw(canvas) dispatchDraw,onDrawScrollBars一次调用
所以,我们再自定义控件的时候,只需要重写onDraw(),dispatchDraw() 即可,其余的事情,在父类中都已经处理了。
onDraw():绘制view本省
dispatchDraw():绘制子类view
我们通常定制组件的时候重写的是onDraw()方法。值得注意的是ViewGroup容器组件的绘制,当它没有背景时直接调用的是dispatchDraw()方法, 而绕过了draw()方法,当它有背景的时候就调用draw()方法,而draw()方法里包含了dispatchDraw()方法的调用。因此要在ViewGroup上绘制东西的时候往往重写的是dispatchDraw()方法而不是onDraw()方法,或者自定制一个Drawable,重写它的draw(Canvas c)和getIntrinsicWidth()