使用简单工厂模式设计一个可以创建不同几何形状(如圆形、方形和三角形等)的绘图工具,每个几何图形都具有绘制 draw()和擦除 erase()两个方法,要求在绘制不支持的几何图形时,提示 UnSupportedShapeException。
一、类结构图
工厂角色类:设计为名称为 ShapeFactory 的具体类,面向抽象产品角色类 Shape 编程,提供静态的具体工厂方法 createShape(),createShape()内部实现根据不同参数创建不同具体产品角色类的逻辑,如果参数超出规定参数的范围,抛出 UnSupportedShapeException 异常;
抽象产品角色类:设计为名称为 Shape 的接口,包括抽象方法 draw()、抽象方法 erase();
具体产品角色类:设计为抽象产品角色类 Shape 的子类,包括具体产品角色类 Circle、具体产品角色类 Triangle、具体产品角色类 Square,分别实现抽象方法 draw()、抽象方法 erase()。
二、典型实现代码
具体形状工厂类:具体工厂角色类
// 具体形状工厂类:具体工厂角色类
public class ShapeFactory {
public static Shape createShape(String type) {
if (type == "circle") {
return new Circle();
} else if (type == "square") {
return new Square();
} else if (type == "triangle") {
return new Triangle();
}
return null;
}
}
复制代码
抽象形状接口:抽象产品角色类
// 抽象形状接口:抽象产品角色类
public interface Shape {
public void draw();
public void erase();
}
复制代码
具体圆形类:具体产品角色类
// 具体圆形类:具体产品角色类
public class Circle implements Shape{
@Override
public void draw() {
System.out.println("绘制圆形");
}
@Override
public void erase() {
System.out.println("擦除圆形");
}
}
复制代码
具体正方形类:具体产品角色类
// 具体正方形类:具体产品角色类
public class Square implements Shape {
@Override
public void draw() {
System.out.println("绘制正方形");
}
@Override
public void erase() {
System.out.println("擦除正方形");
}
}
复制代码
具体三角形类:具体产品角色类
// 具体三角形类:具体产品角色类
public class Triangle implements Shape {
@Override
public void draw() {
System.out.println("绘制三角形");
}
@Override
public void erase() {
System.out.println("擦除三角形");
}
}
复制代码
客户端代码:
public class Client {
public static void main(String[] args) {
Shape circle, square, triangle;
circle = ShapeFactory.createShape("circle");
circle.draw();
circle.erase();
System.out.println();
square = ShapeFactory.createShape("square");
square.draw();
square.erase();
System.out.println();
triangle = ShapeFactory.createShape("triangle");
triangle.draw();
triangle.erase();
System.out.println();
}
}
复制代码
编译并运行程序,输出如下结果:
绘制圆形
擦除圆形
绘制正方形
擦除正方形
绘制三角形
擦除三角形
复制代码
评论