在我们平时学习包装涉及模式的时候往往会跟继承相混淆。
很多学生会有疑问,为什么不能直接继承呢?
下面会解释一下包装类设计模式的好处和与继承的区别。
先说继承,什么时候用继承,当父类的方法不能完全满足子类使用的时候,需要用一个类继承父类,重写其中要完善的方法即可。
比如说LinkedHashMap继承了HashMap,其中添加了存储有序的这样的规则。
这样的好处是可以直接使用父类中的方法了,即获取长度的方法,可以不用在子类重写,直接使用父类即可。
但是这样的也会有一些坏处,如果在开发中需求变更了,比如HashMap获取长度的方式变化了,那么子类LinkedHashMap一定也会随着变化的。
所以这就是继承的优点和缺点,优点:代码方便。缺点:耦合性太高。不利于后期维护。
再说包装类设计模式。
同样说个很简单的例子。用ArrayList进行去除重复的元素。
如果此时用包装类设计模式我们可以这样写:
[AppleScript] 纯文本查看 复制代码
public class Demo1 {
public static void main(String[] args) {
SingleArrayList<String> sal = new SingleArrayList<>(new ArrayList<String>());
sal.add("a");
sal.add("a");
sal.add("a");
sal.add("a");
sal.add("b");
sal.add("b");
sal.add("b");
System.out.println(sal);
}
}
class SingleArrayList<E> {
private ArrayList<E> list;
public SingleArrayList() {
list = new ArrayList<>();
}
public SingleArrayList(ArrayList<E> list) {
this.list = list;
}
public boolean add(E e) {
if (!list.contains(e)) {
return list.add(e);
}
return false;
}
@Override
public String toString() {
return list.toString();
}
}
实际上就相当于写一个新的集合把原来的ArrayList给包起来了。
也实现了去重的功能。
这样的好处就是,当后期维护的时候,被包装的那个东西逻辑改变了,不会直接影响包装类的功能。
这样降低的类与类之间的耦合性。
对后期项目维护有帮助。[attach]199102[/attach][attach]199100[/attach][attach]199100[/attach]