黑马程序员技术交流社区

标题: 【南京校区】常见的设计模式--包装类设计模式 [打印本页]

作者: 大蓝鲸Java    时间: 2017-12-20 19:55
标题: 【南京校区】常见的设计模式--包装类设计模式
本帖最后由 大蓝鲸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给包起来了。
也实现了去重的功能。
这样的好处就是,当后期维护的时候,被包装的那个东西逻辑改变了,不会直接影响包装类的功能。
这样降低的类与类之间的耦合性。
对后期项目维护有帮助。[attach]199102[/attach][attach]199100[/attach][attach]199100[/attach]



作者: 溜达的鱼    时间: 2017-12-20 20:54
感谢分享

作者: 阿胡婷婷    时间: 2017-12-21 09:30

作者: 无敌小金刚    时间: 2017-12-21 09:43
看起来超厉害的样子
作者: 烟雨斜阳    时间: 2017-12-21 09:56
6666好厉害
作者: zhangsiyuan    时间: 2017-12-21 10:20
不明觉厉!666666




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2