什么是组合实体模式(CompositeEntity)?

95 阅读1分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

  1. 意图
    对象的组合再组合
  2. 类图
    在这里插入图片描述
  3. 实例
static class DependentObj1 {
        private String data;

        public String getData() {
            return data;
        }

        public void setData(String data) {
            this.data = data;
        }
    }

    static class DependentObj2 {
        private String data;

        public String getData() {
            return data;
        }

        public void setData(String data) {
            this.data = data;
        }
    }

    /**
     * 粗粒度实体
     */
    static class CoarseGrainedEntity {
        private DependentObj1 dependentObj1 = new DependentObj1();
        private DependentObj2 dependentObj2 = new DependentObj2();

        public void setData (String data1, String data2) {
            dependentObj1.setData(data1);
            dependentObj2.setData(data2);
        }

        public String[] getData () {
            return new String[]{dependentObj1.getData(), dependentObj2.getData()};
        }
    }

    static class CompositeEntity {
        private CoarseGrainedEntity coarseGrainedEntity = new CoarseGrainedEntity();

        public void setData (String data1, String data2) {
            coarseGrainedEntity.setData(data1, data2);
        }

        public String[] getData () {
            return coarseGrainedEntity.getData();
        }
    }

    static class Client {
        private CompositeEntity compositeEntity = new CompositeEntity();

        public void setData (String data1, String data2) {
            compositeEntity.setData(data1, data2);
        }

        public void printData () {
            int len = compositeEntity.getData().length;
            if (len > 0) {
                for (int i = 0; i < len; i++) {
                    System.out.println(compositeEntity.getData()[i]);
                }
            }
        }
    }
  1. 测试
public static void main(String[] args) {
        Client client = new Client();
        client.setData("hello", "good");
        client.printData();
        System.out.println();
        client.setData("mm", "dd");
        client.printData();
    }

运行结果:

hello
good

mm
dd

想看更多吗?请访问:设计模式