• 设计模式学习笔记之组合模式


    组合模式

        允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
        使用组合结构,我们能把相同的操作应用在组合和个别对象上。换句话说,在大多数情况下,我们可以忽略对象组合和个别对象之间的差别。
        说明:
        1、组合模式使添加或者删除子节点变得容易;
        场景:
        1、想要标识对象的部分-整体结构;
        2、想要客户端忽略组合对象和个体对象的差异,客户端将统一使用组合结构中的所有对象;
     
    /**
     * 为组合中所有对象定义一个接口,不管是组合还是节点
     * */
    public abstract class Component {
     
        public void add(Component component) {
            new UnsupportedOperationException();
        }
     
        public void remove(Component component) {
            new UnsupportedOperationException();
        }
     
        public String getName() {
            return null;
        }
     
        public void foreach(){
            new UnsupportedOperationException();
        }
    }
    /**
     * 子节点
     * */
    public class Leaf extends Component{
     
        String name;
     
        public Leaf(String name) {
            this.name = name;
        }
     
        @Override
        public void add(Component component) {
            System.out.println("不存在子节点,无法添加。。。");
        }
     
        @Override
        public void remove(Component component) {
            new UnsupportedOperationException();
        }
     
        @Override
        public String getName() {
            return name;
        }
     
    }
    /**
     * 组合类
     * */
    public class Composite extends Component{
     
        String name;
        private List<Component> child = new ArrayList<Component>();
     
        public Composite(String name) {
            this.name = name;
        }
     
        @Override
        public void add(Component component) {
            child.add(component);
        }
     
        @Override
        public void remove(Component component) {
            child.remove(component);
        }
     
        @Override
        public void foreach(){
            for(Component component : child) {
                System.out.println(component.getName());
            }
        }
     
        @Override
        public String getName() {
            return name;
        }
    }
    public class Client {
     
        public static void main(String[] args) {
            Component component = new Composite("根节点");
            Component child = new Composite("一级子节点child");
            Component child_1 = new Leaf("一级子节点child之子节点一");
            Component child_2 = new Leaf("一级子节点child之子节点二");
            child.add(child_1);
            child.add(child_2);
            Component child2 = new Composite("一级子节点child2");
            component.add(child);
            component.add(child2);
            component.foreach();
        }
     
    }
    参考资料:《Head First 设计模式》
  • 相关阅读:
    go语言从零学起(三) -- chat实现的思考
    go语言从零学起(二)--list循环删除元素(转载)
    go语言从零学起(一) -- 文档教程篇
    Spring框架事务支持模型的优势
    Thymeleaf
    社保到底是多交好,还是少交好?
    使用静态工厂方法而不是构造器
    EJB、RMI、XMLRPC、Hessian、Thrift 、Protobuf
    MySQL存储过程
    MySQL常用功能语句分类总结
  • 原文地址:https://www.cnblogs.com/LeslieXia/p/5494896.html
Copyright © 2020-2023  润新知