設計模式《一》

       1.什麼是設計模式?
設計模式(Design Pattern)是一套被反覆使用、多數人知曉的、經過分類的、代碼設計經驗的總結。
使用設計模式的目的:爲了代碼可重用性、讓代碼更容易被他人理解、保證代碼可靠性。 設計模式使代碼編寫真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。
2.爲什麼要用設計模式?

         設計模式是前人根據經驗總結出來的,使用設計模式,就相當於是站在了前人的肩膀上。

         設計模式使程序易讀。熟悉設計模式的人應該能夠很容易讀懂運用設計模式編寫的程序。

         設計模式能使編寫的程序具有良好的可擴展性,滿足系統設計的開閉原則。比如策略模式,就是將不同的算法封裝在子類中,在需要添加新的算法時,只需添加新的子類,實現規定的接口,即可在不改變現有系統源碼的情況下加入新的系統行爲。

        設計模式能降低系統中類與類之間的耦合度。比如工廠模式,使依賴類只需知道被依賴類所實現的接口或繼承的抽象類,使依賴類與被依賴類之間的耦合度降低。

        設計模式能提高代碼的重用度。比如適配器模式,就能將系統中已經存在的符合新需求的功能代碼兼容新的需求提出的接口 。

        設計模式能爲常見的一些問題提供現成的解決方案。

        設計模式增加了重用代碼的方式。比如裝飾器模式,在不使用繼承的前提下重用系統中已存在的代碼。

工廠模式

   

實現

我們將創建一個 Shape 接口和實現 Shape 接口的實體類。下一步是定義工廠類 ShapeFactory

FactoryPatternDemo,我們的演示類使用 ShapeFactory 來獲取 Shape 對象。它將向 ShapeFactory 傳遞信息(CIRCLE / RECTANGLE / SQUARE),以便獲取它所需對象的類型。

工廠模式的 UML 圖

步驟 1

創建一個接口。

Shape.java

public interface Shape {
   void draw();
}

步驟 2

創建實現接口的實體類。

Rectangle.java

public class Rectangle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Rectangle::draw() method.");
   }
}

Square.java

public class Square implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Square::draw() method.");
   }
}

Circle.java

public class Circle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Circle::draw() method.");
   }
}

步驟 3

創建一個工廠,生成基於給定信息的實體類的對象。

ShapeFactory.java

public class ShapeFactory {
    public static <T> T getClass(Class<? extends T> clazz) {
        T obj = null;

        try {
            obj = (T) Class.forName(clazz.getName()).newInstance();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

        return obj;
    }
}

步驟 4

使用該工廠,通過傳遞類型信息來獲取實體類的對象。

FactoryPatternDemo.java

public class FactoryPatternDemo {

   public static void main(String[] args) {
      ShapeFactory shapeFactory = new ShapeFactory();

      //獲取 Circle 的對象,並調用它的 draw 方法
      Shape shape1 = shapeFactory.getShape("CIRCLE");

      //調用 Circle 的 draw 方法
      shape1.draw();

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

      //調用 Rectangle 的 draw 方法
      shape2.draw();

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

      //調用 Square 的 draw 方法
      shape3.draw();
   }
}

步驟 5

驗證輸出。

Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章