在某绘图软件中提供了多种大小不同的画笔(Pen)
在某绘图软件中提供了多种大小不同的画笔(Pen),并且可以给画笔指定不同的颜色,某设计人员针对画笔的结构设计了如图2-11所示的初始类图。
通过仔细分析,设计人员发现该类图存在非常严重的问题,如果增加一种新的大小的笔或者增加一种新的颜色,需要增加很多子类,例如增加一种绿色,则对应每一种大小的笔都需要增加一支绿色笔,系统中类的个数急剧增加。试依据依赖倒转原则和合成复用原则对该设计方案进行重构,使得增加新的大小的笔和增加新的颜色都较为方便。
简单工厂模式
使用简单工厂模式设计一个可以创建不同几何形状(如圆形、方形和三角形等)的绘图工具,每个几何图形都要有绘制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,对不起,没有您想要的形状呢!”);
}
}
}
工厂方式模式
(因为区分,所以在类的前面加了Gj19)后面代码去掉Gj19
抽象产品ImgReader:
package FactoryPattern;
/**
* 抽象产品ImgReader
*/
public interface Gj19ImgReader {
public void read();
}
具体产品GifReader:
package FactoryPattern;
/**
* 具体产品GifReader
*/
public class Gj19GifReader implements Gj19ImgReader{
@Override
public void read() {
System.out.println(“读取gif格式的图片”);
}
}
具体产品JPGReader:
package FactoryPattern;
/**
* 具体产品JPGReader
*/
public class Gj19JPGReader implements Gj19ImgReader{
@Override
public void read() {
System.out.println(“读取JPG格式的图片”);
}
}
抽象工厂ImgReaderFactory:
package FactoryPattern;
/**
* 抽象工厂ImgReaderFactory
*/
public interface Gj19ImgReaderFactory {
public Gj19ImgReader getGj19ImgReader();
}
具体工厂GifReaderFactory:
package FactoryPattern;
/**
* 具体工厂GifReaderFactory
*/
public class Gj19GifReaderFactory implements Gj19ImgReaderFactory {
@Override
public Gj19ImgReader getGj19ImgReader() {
Gj19ImgReader gj19ImgReader = new Gj19GifReader();
return gj19ImgReader;
}
}
具体工厂JPGReaderFactory:
package FactoryPattern;
/**
* 具体工厂JPGReaderFactory
*/
public class Gj19JPGReaderFactory implements Gj19ImgReaderFactory {
@Override
public Gj19ImgReader getGj19ImgReader() {
Gj19ImgReader gj19ImgReader = new Gj19JPGReader();
return gj19ImgReader;
}
}
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91280 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!