三角形圆形创建与擦除java_设计模式---------------简单工厂模式

本文介绍了如何使用Java的简单工厂模式设计一个绘图工具,该工具可以创建并操作不同类型的几何图形,包括圆形、方形和三角形。每个图形对象具备draw()和erase()方法。在尝试创建不支持的图形时,程序会抛出Unsupported Exception异常。文章还探讨了简单工厂模式的优缺点,包括责任分割明确、拓展困难等。
摘要由CSDN通过智能技术生成

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

一、题目(Question)

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

二、类图(Class Diagram)

0734efd1eb5370d48fd692112dea9260.png

三、代码(Code)

Shape.java

8839baa284d5df0e580f9d381513c14e.png

CircleShape.java

7f0d4c71bc8745760ca294b75e6ec93f.png

SquareShape.java

4aa11edb6026efebdf252d409bdddcda.png

Triangle.java

b6fbad51a1a85dca0d5fbd9e4ca93e73.png

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)拓展困难

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值