參考# java-design-patterns
本文只用作個人學習
一斩启、抽象文檔模式定義
通過抽象的方式更加靈活的配置類的屬性序调,更加安全對屬性進行配置
二、使用場景
1.類的屬性變化頻率很大
2.需要在不改變類的結構上動態(tài)的添加類的屬性
三兔簇、核心思想
1.通過一個集合來存儲屬性
2.建立屬性表統(tǒng)一維護類的屬性
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.通過定義接口边酒,提供屬性進行動態(tài)配置
屬性的鍵可以由一個類統(tǒng)一管理
/**
* 配置了2個屬性 Logo和MODEL
**/
public interface CarLogo extends Document{
String LOGO = "LOGO";
String getLogo();
}
public interface CarModel extends Document {
String MODEL = "MODEL";
String getModel();
}
//統(tǒng)一管理屬性的類
public class PropertyList {
interface Car {
String MODEL = "MODEL";
String LOGO = "LOGO";
}
}
4.實現(xiàn)類的動態(tài)配置
屬性都存儲在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);
}
}