設計模式學習的好方法


設計模式的學習

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

重點

設計模式的主要思想其實很簡單,就是:測試驅動開發。測試先行。意思是:先寫測試代碼,再去實現代碼。
所以先寫單元測試是很重要的,因為選用什么設計模式,不是容易就決定的。還是根據業務場景去決定的。而且業務需求隨時都變
化。所以你的代碼要經受得住各種變化。設計模式跟着需求變化而變化。這就是XP的關鍵,擁抱變化。那如何確保每次修改后代碼
能穩定地運行呢?那就行寫好單元測試。盡量覆蓋盡量多的測試用例,每次修改完跑一下單元測試。不用管要用什么設計模式。只
要你的代碼都能通過,你的代碼肯定用了很多設計模式在里面,不然不可能做到擁抱變化(就是解耦)。設計模式的目標就是擁抱變化。

代碼示例

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

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);
    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM