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("你好,很高兴认识你");
}
}
工程类:
运行结果: