设计模式之模板模式

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()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值