A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 大蓝鲸Java 于 2017-12-20 21:18 编辑

【南京校区】常见的设计模式--包装类设计模式



    在我们平时学习包装涉及模式的时候往往会跟继承相混淆。
    很多学生会有疑问,为什么不能直接继承呢?
    下面会解释一下包装类设计模式的好处和与继承的区别。
    先说继承,什么时候用继承,当父类的方法不能完全满足子类使用的时候,需要用一个类继承父类,重写其中要完善的方法即可。
比如说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给包起来了。
也实现了去重的功能。
这样的好处就是,当后期维护的时候,被包装的那个东西逻辑改变了,不会直接影响包装类的功能。
这样降低的类与类之间的耦合性。
对后期项目维护有帮助。


5 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
看起来超厉害的样子
回复 使用道具 举报
6666好厉害
回复 使用道具 举报
不明觉厉!666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马