美文网首页
抽象文档模式

抽象文档模式

作者: 石器时代小古董 | 来源:发表于2017-11-21 17:02 被阅读0次

    参考# java-design-patterns
    本文只用作个人学习

    一、抽象文档模式定义

    通过抽象的方式更加灵活的配置类的属性,更加安全对属性进行配置
    

    二、使用场景

    1.类的属性变化频率很大
    2.需要在不改变类的结构上动态的添加类的属性
    

    三、核心思想

    1.通过一个集合来存储属性
    2.建立属性表统一维护类的属性
    3.通过接口来配置获取和添加属性的方式
    

    四、实例

    1.抽象出基类,提供存储属性的集合。
    2.通过接口定义存储和获取的方法

    public interface Document {
    
        void put(String key, Object value);
    
        Object get(String key);
    }
    
    
    /**
     * 定义属性的保存方式
     * 将所有属性保存在properties集合中
     */
    
    public abstract class AbstractDocument implements Document {
        private Map<String, Object> mProperties;
    
        protected AbstractDocument(Map<String, Object> properties) {
            this.mProperties = properties;
        }
    
        @Override
        public void put(String key, Object value) {
            this.mProperties.put(key, value);
        }
    
        @Override
        public Object get(String key) {
            return mProperties.get(key);
        }
    }
    
    

    3.通过定义接口,提供属性进行动态配置
    属性的键可以由一个类统一管理

    /**
    *   配置了2个属性  Logo和MODEL
    **/
    public interface CarLogo extends Document{
        String LOGO = "LOGO";
        String getLogo();
    }
    public interface CarModel extends Document {
        String MODEL = "MODEL";
        String getModel();
    }
    //统一管理属性的类
    public class PropertyList {
        interface Car {
            String MODEL = "MODEL";
            String LOGO = "LOGO";
        }
    }
    

    4.实现类的动态配置
    属性都存储在properties类中

    public class Car extends AbstractDocument implements CarModel, CarLogo {
    
        public Car(Map<String, Object> properties) {
            super(properties);
        }
        @Override
        public String getModel() {
            return (String) get(PropertyList.Car.MODEL);
        }
        @Override
        public String getLogo() {
            return (String) get(CarLogo.LOGO);
        }
    }
    

    相关文章

      网友评论

          本文标题:抽象文档模式

          本文链接:https://www.haomeiwen.com/subject/ejxtmxtx.html