【设计模式作业01】依赖倒转和工厂模式

在某绘图软件中提供了多种大小不同的画笔(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进行处理,非常感谢!

上一篇 2021年2月21日
下一篇 2021年2月21日

相关推荐