码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-09-24 22:09:06      阅读:468      评论:0      收藏:0      [点我收藏+]

标签:package   return   public   三角形   绘图工具   

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

一、题目(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) 拓展困难


本文出自 “@coder” 博客,请务必保留此出处http://smallcoder.blog.51cto.com/11941149/1856070

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

标签:package   return   public   三角形   绘图工具   

原文地址:http://smallcoder.blog.51cto.com/11941149/1856070

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!