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("你好,很高興認識你");
}
}
工程類:
運行結果: