上一篇讲述如何优化Padding使其在树形布局内部拖拽时也能生效。本篇讲解如何通过两种设计模式来极大地增加布局的拓展性。
前期准备
在真正开始之前我们首先要熟悉两种设计模式。
1.策略模式
策略模式可以将一些具有相似特征的算法提取出来变成一个接口,这样就可以根据需要动态地实现算法的替换。说得有些抽象,举个例子。
比如一个类要用到排序,根据排序量大小、初始状态的不同,我们可以在快排、冒泡、归并等等算法进行选择。但是常规的方式是通过if-else分支来实现。问题就来了,如果现在要添加一种排序算法,就不得不在代码里再添加一个else代码块,这是与开闭原则相悖的。代码如下:
class ClassA{
void sort(int arr[]){
if(...){
//快排
}else if(...){
//冒泡
}else if(...){
//归并
}else if(...){
//新添加的排序算法
}
}
}
想想看,如果大多数情况代码都要跳到第四种算法来进行排序,那就避免不了大量的比较判断。利用策略模式就能为了解决上述两种问题。
无论是快排、冒泡还是归并,它们都有共同操作那就是给数组排序,所以可以抽象出一个排序类(或接口)。
public interface SortStrategy{
void sort(int arr[]);
}
具体是怎么排的就看它们自己的实现方式了。
public class QuickSort extends SortStrategy{
public void sort(int arr[]){
...
//算法用时方恨少,哎...忘的差不多了
}
}
public class BubbleSort extends SortStrategy{
public void sort(int arr[]){
...
}
}
public class MergerSort extends SortStrategy{
public void sort(int arr[]){
...
}
}
根据需要使用具体的策略就行了,就算要添加新的排序算法,也不需要再修改ClassA了,而且还能避免大量的if-else分支判断。
class ClassA{
void sort(int arr[],SortStrategy sortStrategy){
sortStrategy.sort(arr);
}
}
2.装饰模式
装饰模式是一种结构型设计模式,这种设计模式可以动态地拓展原有对象的功能,代替类的继承。下面举个例子。
//车辆类,抽象类
abstract class Vehicle{
abstract void run();
}
//汽车类
class

本文介绍如何使用策略模式和装饰模式增强树形布局的灵活性,并通过工厂方法模式简化复杂对象的创建过程。
最低0.47元/天 解锁文章
799

被折叠的 条评论
为什么被折叠?



