使用简单工厂模式设计一个可以创建不同几何形状(如圆形、方形和三角形等)的绘图工具,每个几何图形都具有绘制 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(); }}
复制代码
编译并运行程序,输出如下结果:
绘制圆形擦除圆形
绘制正方形擦除正方形
绘制三角形擦除三角形
复制代码
评论