模板方法,和单例模式是我认为GOF的23中最简单的两种模式。 1.意图 2.结构 定义了几个步骤1,2,3等,在模板方法中按照一定的结构顺序执行这些步骤。父类的方法可以有缺省实现,也可以是一个空实现,即所谓的钩子操作。
3.代码 public class View{ /** * 钩子操作,空实现 */ protected void onDraw(Canvas canvas) { } /** *钩子操作,空实现 */ protected void dispatchDraw(Canvas canvas) { } //算法骨架 public void draw(Canvas canvas) { if (!verticalEdges && !horizontalEdges) { // 步骤1 if (!dirtyOpaque) onDraw(canvas); // 步骤2 dispatchDraw(canvas); // 步骤3 onDrawScrollBars(canvas); return; } } //... ... } 我们看看系统组件TextView的实现: public class TextView{ @Override protected void onDraw(Canvas canvas) { //大量自定义实现代码 } } 如果我们自定义View的话,我们一般也是重写onDraw方法即可: public class MyView extends View { public MyView(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); } } 4.效果 |
|