简单工厂模式,或称静态工厂方法模式,是类的创建模式,由一个工厂对象决定创建出哪一种产品类的实例。
一个例子,要求设计一个创建不同几何形状,如圆形,方形和三角形实例的描图员系统。每个几何图形要有画出draw()和擦去erase()两个方法。
类图如下:
Shape接口
public interface Shape {
//画图形
public void draw();
//擦去
public void erase();
}
几个具体实现类:
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Circle.draw()");
}
@Override
public void erase() {
System.out.println("Circle.erase()");
}
}
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Square.draw()");
}
@Override
public void erase() {
System.out.println("Square.erase()");
}
}
public class Triangle implements Shape {
//画图形
public void draw(){
System.out.println("Triangle.draw()");
}
//擦去
public void erase(){
System.out.println("Triangle.erase()");
}
}
当创建不支持的形状时,抛出一个异常:
public class BadShapeException extends Exception {
private static final long serialVersionUID = -2361054151723200277L;
public BadShapeException(String message){
super(message);
}
}
最后一个客户端:
public class Client {
public static void main(String[] args) throws Exception {
ArtTracer artTracer = ArtTracer.getInstance();
artTracer.createShape("circle").draw();
artTracer.createShape("circle").erase();
artTracer.createShape("square").draw();
artTracer.createShape("square").erase();
artTracer.createShape("Triangle").draw();
artTracer.createShape("Triangle").erase();
artTracer.createShape("other").draw();
}
}
在上面的例子中,我们可以很好的看出简单工厂的优点:工厂类(ArtTracer)含有必要的逻辑判断,决定什么时候创建哪一个产品类的实例,这样客户端则可以免除直接创建产品对象的责任,而仅仅负责“消费”产品,从而实现了对责任的分离。
缺点:一旦工厂类不能正常工作了,则系统会受到影响。