工厂模式

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("你好,很高兴认识你");

    }

}

 

 

工程类:

 

 

运行结果:

 

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