好比說,我有一個界面,查詢地理位置,是比較通用的,各個業務,場景都有可能須要用上。可是對於不一樣的場景,title的文字可能不同,有些業務但願進來後展現「選擇位置」,有些業務進來後但願能展現爲「發送位置」,還有查詢地理位置後,備選的條目數量,以及查詢地理位置的範圍都有可能根據不一樣業務而不同。java
最開始個人作法是這樣的。this
class QueryLocationPage { public static final int TYPE_FOR_LOCATION = 1; // 爲了定位需求 public static final int TYPE_FOR_SEND_CONV = 2; // 爲了發送會話 // 文字顯示 private String mTitle = "選擇位置"; // 查詢範圍 private int mSearchRange = 100; // 結果最多顯示多少個 private int mMaxResult = 30; // 初始化的時候根據業務的type進行內部行爲的配置 private void init(int type) { switch (type) { case TYPE_FOR_LOCATION : mTitle = "選擇位置"; mSearchRange = 1000; mMaxResult = 100; break; case TYPE_FOR_SEND_CONV : mTitle = "發送到會話"; mSearchRange = 100; mMaxResult = 30; break; } } }
上述這樣的作法其實是很差的,爲何我一個純粹的功能須要知道哪一個業務哪一個業務呢。其實應該是將這些變成配置。code
static class Param { public String title = "選擇位置"; public int searchRange = 100; public int maxResult = 30; public Param title(String title) { this.title = title; return this; } public Param searchRange(int sr) { this.searchRange = sr; return this; } public Param maxResult(int mr) { this.maxResult = mr; return this; } } public static final Param SenceForLocation = new Param() .title("選擇位置") .searchRange(1000) .maxResult(100); public static final Param SenceForSendConv = new Param() .title("發送到會話") .searchRange(100) .maxResult(30); // 之後擴展的時候,只須要找一個類似的sence(實際上是一個Param),複製一份,改一改你須要的參數,就能夠了