类图:
image.png
示例代码:
image.png
package com.zhs.design.factory.simple.enums;
public enum ToolType {
CIRCULAR("CIRCULAR", "圆形工具"),
TRIANGLE("TRIANGLE", "三角形工具"),
SQUARE("SQUARE", "正方形工具");
private String code;
private String desc;
ToolType(String code, String desc) {
this.code = code;
this.desc = desc;
}
public String getCode() {
return code;
}
public String getDesc() {
return desc;
}
}
package com.zhs.design.factory.simple.factory;
import com.zhs.design.factory.simple.UnSupportedShapeException;
import com.zhs.design.factory.simple.enums.ToolType;
import com.zhs.design.factory.simple.tools.Circular;
import com.zhs.design.factory.simple.tools.DrawTool;
import com.zhs.design.factory.simple.tools.Square;
import com.zhs.design.factory.simple.tools.Triangle;
public class DrawToolFactory {
public static DrawTool getDrawTool(String type) throws UnSupportedShapeException {
if (ToolType.CIRCULAR.getCode().equals(type)){
return new Circular();
} else if (ToolType.TRIANGLE.getCode().equals(type)){
return new Triangle();
} else if (ToolType.SQUARE.getCode().equals(type)){
return new Square();
} else {
throw new UnSupportedShapeException(type);
}
}
}
package com.zhs.design.factory.simple.tools;
----------------------------------------------------------------------------------------
public interface DrawTool {
void draw();
void erase();
}
----------------------------------------------------------------------------------------
public class Circular implements DrawTool {
@Override
public void draw() {
System.out.println("画出一个圆形");
}
@Override
public void erase() {
System.out.println("擦除一个圆形");
}
}
----------------------------------------------------------------------------------------
public class Square implements DrawTool {
@Override
public void draw() {
System.out.println("画出一个正方形");
}
@Override
public void erase() {
System.out.println("擦除一个正方形");
}
}
----------------------------------------------------------------------------------------
public class Triangle implements DrawTool {
@Override
public void draw() {
System.out.println("画出一个三角形");
}
@Override
public void erase() {
System.out.println("擦除一个三角形");
}
}
package com.zhs.design.factory.simple;
import com.zhs.design.factory.simple.factory.DrawToolFactory;
import com.zhs.design.factory.simple.tools.DrawTool;
public class DrawClient {
public static void main(String[] args) {
String[] toolTypes = {"SQUARE", "TRIANGLE", "CIRCULAR", "NO"};
for (String type:toolTypes) {
try {
DrawTool drawTool = DrawToolFactory.getDrawTool(type);
drawTool.draw();
drawTool.erase();
} catch (UnSupportedShapeException e) {
System.out.println(e.getMessage());
}
}
}
}
package com.zhs.design.factory.simple;
public class UnSupportedShapeException extends RuntimeException {
public UnSupportedShapeException(String type) {
super("异常:不支持该类型:"+type);
}
}
运行结果:
image.png
网友评论