設計模式學習的好方法

設計模式的學習

不少同窗都是經過閱讀些書來學習設計模式,學習各類模式的代碼結構或一些不切實際的實用場景,很快忘記,或理解不夠,在工做中誤用或濫用。
下面我總結了一個很學習設計模式的方法。設計模式

重點

設計模式的主要思想其實很簡單,就是:測試驅動開發。測試先行。意思是:先寫測試代碼,再去實現代碼。
因此先寫單元測試是很重要的,由於選用什麼設計模式,不是容易就決定的。仍是根據業務場景去決定的。並且業務需求隨時都變
化。因此你的代碼要經受得住各類變化。設計模式跟着需求變化而變化。這就是XP的關鍵,擁抱變化。那如何確保每次修改後代碼
能穩定地運行呢?那就行寫好單元測試。儘可能覆蓋儘可能多的測試用例,每次修改完跑一下單元測試。不用管要用什麼設計模式。只
要你的代碼都能經過,你的代碼確定用了不少設計模式在裏面,否則不可能作到擁抱變化(就是解耦)。設計模式的目標就是擁抱變化。ide

代碼示例

若是你不知道什麼叫工廠模式。請跑下面單元測試代碼,確保此測試代碼能經過,說明你已經掌握工廠模式了。單元測試

public class PatternDemo {
    @Test
    /**
     * 工廠模式單元測試
     */
    public void testShapeFactory() {
        ShapeFactory shapeFactory = new ShapeFactory();
        //獲取 Circle 的對象,並調用它的 draw 方法
        Shape shape1 = shapeFactory.getShape("CIRCLE");

        //Shape 是否接口,由於不是接口也能夠,類或抽象類也能夠實現這樣的效果。這樣違反了依賴倒置的原則。
        //行爲的抽象選擇依賴接口而非類或抽象類。
        //下面判斷是否爲接口。
        //寫單元測試時是不用寫這個測試的。
        final boolean isInterface = Shape.class.isInterface();
        Assert.assertEquals(true, isInterface);

        //調用 Circle 的 draw 方法
        String returnStr = shape1.getDrawStr();
        Assert.assertEquals("Inside Circle::draw() method.", returnStr);

        //獲取 Rectangle 的對象,並調用它的 draw 方法
        Shape shape2 = shapeFactory.getShape("RECTANGLE");

        //調用 Rectangle 的 draw 方法
        returnStr = shape2.getDrawStr();
        Assert.assertEquals("Inside Rectangle::draw() method.", returnStr);

        //獲取 Square 的對象,並調用它的 draw 方法
        Shape shape3 = shapeFactory.getShape("SQUARE");

        //調用 Square 的 draw 方法
        returnStr = shape3.getDrawStr();
        Assert.assertEquals("Inside Square::draw() method.", returnStr);
    }

}
相關文章
相關標籤/搜索