设计模式---------------简单工厂模式

一、题目(Question

使用简单工厂模式设计一个可以创建不同几何形状(如圆形、方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,提示一个Unsupported Exception异常。

二、类图(Class Diagram

wKiom1fmIeaDGqpYAADs03ye74A706.png-wh_50


三、代码(Code

Shape.java

wKioL1fmIeaTWTTvAAA6oLdZy0c227.png-wh_50

 

CircleShape.java

wKiom1fmIeejJmRyAABO5N0Tv8Q426.png-wh_50

 

 

 

 

SquareShape.java

wKiom1fmIefx4tPuAABOb1Uao18162.png-wh_50

 

Triangle.java

wKioL1fmIeiRzK96AABQfq5Yiy8520.png-wh_50

 

 

 

 

ShapeFactory.java

 

package simple_factory;
/*
 * 1、静态工厂类
 * 2、包含一个静态方法
 */
public class ShapeFactory {
//静态方法,放回Shape抽象类型
public static Shape generateShape(String shapeName) throws Exception {
//绘制三角形图案
if (shapeName.equals("三角形"))
{
return new Triangle();
}
//绘制正方形图案
else if (shapeName.equals("正方形"))
{
return new SquareShape();
//绘制圆形图案
} else if (shapeName.equals("圆形"))
{
return new CircleShape();
//若没有用户想要的形状,则抛出一个异常Exception
}else{
throw new Exception("UnSupportedException,对不起,没有您想要的形状呢!");
}
}
}

 

 

测试代码:

package simple_factory;
 
public class Main {

public static void main(String[] args) throws Exception {
 
Shape shape1 = null;
shape1 = ShapeFactory.generateShape("圆形");
shape1.draw();//我正在为您绘制圆形图案呢!
shape1.erase();//我正在为您擦除圆形图案呢!

Shape shape2 =ShapeFactory.generateShape("三角形");
shape2.draw();//我正在为您绘制三角形图案呢!
shape2.erase();//我正在为您擦除三角形图案呢!

Shape shape3= ShapeFactory.generateShape("正方形");
shape3.draw();//我正在为您擦除正方形图案呢!
shape3.erase();//我正在为您绘制正方形图案呢!

/*
 * 以下代码抛出异常UnSupportException
 */
Shape shape4 = ShapeFactory.generateShape("六边形");
shape4.draw();
shape4.erase();
}
}

 

 

四、总结:

1、优点

a) 用户只需要知道对象的某一个属性,如图形的名称(三角形、正方形、圆形等)即可获得一个对应的对象,而不用知道具体的实现细节。实现了对责任的有效分割。

2、缺点

a) 当我们在已有图形的基础上,想要增加一个图形(如正六边形),此时我们得修改工厂类中的工厂方法,违背了设计原则中的“开闭原则”。

b) 使用简单工厂模式会增加系统中类的个数,增加了系统的复杂度。

c) 工厂类集中负责所有产品(图形)的生产工作,一旦工厂类不能工作,整个系统都将收到牵连。

d) 拓展困难