1. 工厂模式主要有以下几种形态:
- 简单工厂(sample Factory)模式
- 工厂方法(Factory Method)模式
- 抽象工厂(Abstract Factory)模式
1.1 简单工厂(sample Factory)模式
例题(1.1)请使用简单工厂模式设计一个创建不同几何形状,如圆形,方形和三角形实例的描图员(Art Tracer)系统。每个几何图形都要有画出draw()一个方法。 当描图员接到指令,要求创建不支持的几何图形时,要提出BadShapeException 异常。
工厂类:
package cn.sqsoft.javapatterns.simplefactory;
/**
* @author 宝剑·123钢铁·123steel.cn
*
*/
public class ArtTracer
{
public static Shape createShape(String which) throws BadShapeException
{
if(which.equalsIgnoreCase("Circle"))
{
return new Circle();
}
else if(which.equalsIgnoreCase("Square"))
{
return new Square();
}
else
{
throw new BadShapeException(which);
}
}
}
抽象类:
package cn.sqsoft.javapatterns.simplefactory;
/**
* @author 宝剑·123钢铁·123steel.cn
*
*/
public interface Shape
{
void draw();
}
具体类:
package cn.sqsoft.javapatterns.simplefactory;
/**
* @author 宝剑·123钢铁·123steel.cn
*
*/
public class Circle implements Shape
{
public void draw()
{
System.out.println("draw circle");
}
}
package cn.sqsoft.javapatterns.simplefactory;
/**
* @author 宝剑·123钢铁·123steel.cn
*
*/
public class Square implements Shape
{
public void draw()
{
System.out.println("draw Square");
}
}
辅助类:
package cn.sqsoft.javapatterns.simplefactory;
/**
* @author 宝剑·123钢铁·123steel.cn
*
*/
public class BadShapeException extends Exception
{
public BadShapeException(String msg)
{
super(msg);
}
}
测试类:
package cn.sqsoft.javapatterns.simplefactory;
/**
* @author 宝剑·123钢铁·123steel.cn
*
*/
public class Test
{
public static void main(String[] args) throws BadShapeException
{
try
{
ArtTracer.createShape("Circle").draw();
ArtTracer.createShape("Square").draw();
//ArtTracer.createShape("Hello").draw();
}
catch(BadShapeException e)
{
System.out.println(e);
}
}
}