工廠模式

1) UML繪製工廠方法模式的類圖。

2) 設計應用:

假設我們要開發一個繪圖程序,用來繪製簡單的幾何圖形,這個軟件應該能夠處理下面的幾種幾何對象:

圓形(Circle) 

矩形(Rectangle) 

正方形(Square

三角形(Triangle) 

除了各自特有的屬性和方法之外,所有的幾何圖形幾乎都可以抽象出繪製(draw)和擦除(erase)兩個公共方法,利用工廠方法模式進行設計,畫出結構類圖並指明類之間的關係,然後編寫代碼予以實現。 


工廠模式UML圖:

 

 

 

1.抽象產品(Product) : GeometricShapes.java 

public abstract class GeometricShapes{

   String shapes;

   public abstract void writeWord(String s);

}

 

2.具體產品(ConcreteProduct_1 : CircleGeometricShapes .java 

public class CircleGeometricShapes extends GeometricShapes{

    CircleGeometricShapes (){

      shapes="Circle";

    }

    public void writeWord(String s){

       System.out.println(shapes + “  said”+s);

    }

}

 

3.具體產品(ConcreteProduct_2 : RectangleGeometricShapes .java 

public class RectangleGeometricShapes extends GeometricShapes{

    RectangleGeometricShapes (){

      shapes="Rectangle";

    }

    public void writeWord(String s){

       System.out.println(shapes+ “  said”+s);

    }

}

 

4.具體產品(ConcreteProduct_3: SquareGeometricShapes .java 

public class SquareGeometricShapes extends GeometricShapes{

    SquareGeometricShapes (){

      shapes="Square";

    }

    public void writeWord(String s){

       System.out.println(shapes+” said”+s);

    }

}

5.具體產品(ConcreteProduct_3: TriangleGeometricShapes .java 

public class TriangleGeometricShapes extends GeometricShapes{

    TriangleGeometricShapes (){

      shapes="Triangle";

    }

    public void writeWord(String s){

       System.out.println(shapes+” said”+s);

    }

}

 

6.構造者(Creator:GeometricShapesCreator.java 

public abstract class GeometricShapesCreator{

    GeometricShapesCreator(){

       System.out.println("生產了一個"+getGeometricShapes().shapes+"圖形");

    }

    public abstract GeometricShapes getGeometricShapes(); //工廠方法

}

7.具體構造者(ConcreteCreator:

CircleCreator .java

public class CircleCreator extends GeometricShapesCreator{

    public  GeometricShapes  getGeometricShapes(){

       return new CircleGeometricShapes ();

    }

}

RectangleCreator .java

public class RectangleCreator extends GeometricShapesCreator{

    public  GeometricShapes  getGeometricShapes(){

       return  new  RectangleGeometricShapes ();

    }

}

SquareCreator .java

public class SquareCreator extends GeometricShapesCreator{

    public  GeometricShapes  getGeometricShapes(){

       return  new  SquareGeometricShapes ();

    }

}

TriangleCreator .java

public class TriangleCreator extends GeometricShapesCreator{

    public  GeometricShapes  getGeometricShapes(){

       return  new  TriangleGeometricShapes ();

    }

}

 

8.應用 Application.java

 public class Application{

    public static void main(String args[]){

       GeometricShapes  concreteProduct;//父類引用指向子類對象

                                  //這樣的引用將可以調用各個子類的方法

       GeometricShapesCreator  circleCreator = new CircleCreator ();

       concreteProduct  =  circleCreator .getGeometricShapes();

       concreteProduct .writeWord("你好,很高興認識你");

       

       GeometricShapesCreator  triangleCreator = new TriangleCreator ();

       concreteProduct  =  triangleCreator .getGeometricShapes();

       concreteProduct .writeWord("你好,很高興認識你");

 

       GeometricShapesCreator  RectangleCreator  = new RectangleCreator ();

       concreteProduct  =  RectangleCreator .getGeometricShapes();

       concreteProduct .writeWord("你好,很高興認識你");

       

       GeometricShapesCreator  SquareCreator  = new SquareCreator ();

       concreteProduct  =  SquareCreator .getGeometricShapes();

       concreteProduct .writeWord("你好,很高興認識你");

    }

}

 

 

工程類:

 

 

運行結果:

 

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