好比有一個生成驗證碼的功能,有兩個需求,一個是要圖片驗證碼,一個是要向短信發(fā)送驗證碼,兩個需求的邏輯都可分為三個步驟:生成驗證碼,將驗證碼保存到session中,發(fā)送驗證碼。在第三步中,圖片是以流的形式將驗證碼圖片寫到前臺界面,短信是將驗證碼發(fā)送到手機上。如此看來,可將兩種需求的邏輯抽象成一個接口,在此接口中定義一個創(chuàng)建驗證碼的方法,然后用一個抽象類來實現(xiàn)該接口,抽象類中將步驟一和步驟二實現(xiàn)了(用到了依賴查找,后面再說),然后步驟三是個抽象方法,最后圖片和短信的實現(xiàn)類再來繼承此抽象類實現(xiàn)第三個步驟。
現(xiàn)在來說依賴查找,在controller中注入一個map,value指定為創(chuàng)建驗證碼的總接口,spring會將接口的實現(xiàn)類放入map中(key為實例的名字,value為實例),現(xiàn)在map中就會有兩個Entry對象(短信和圖片的),然后就可以通過rest請求中的變量來決定使用哪一個生成器了。在抽象類中也同理注入了一個map,通過請求來生成不同的碼生成器實現(xiàn)步驟一。