设计模式---------------简单工厂模式
一、题目(Question)
使用简单工厂模式设计一个可以创建不同几何形状(如圆形、方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,提示一个Unsupported Exception异常。
二、类图(Class Diagram)
三、代码(Code)
Shape.java
CircleShape.java
SquareShape.java
Triangle.java
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) 拓展困难
转载于:https://blog.51cto.com/smallcoder/1856070