设计模式---------------简单工厂模式
一、题目(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) 拓展困难