工厂模式
一、题目:
现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器ImgReader,如gif图片读取器GifReader用于读取gif格式的图片,jpg图片读取器JPGReader用于读取jpg格式的图片。图片读取器对象通过图片读取器工厂ImgReaderFactory来创建。ImgReaderFactory是一个抽象类,用于定义创建图片读取器的工厂方法,其GifReaderFactory和JPGReaderFactory用于创建具体的图片读取器对象。使用工厂方法模式,实现该程序的设计。
(1)绘制工厂模式结构视图
(2)给出实例类图并实现代码。
二、所用模式结构视图:
三、实例类图:
四、实例实现代码:
(因为区分,所以在类的前面加了Gj19)
抽象产品ImgReader:
package FactoryPattern;
/**
* 抽象产品ImgReader
* @author gong
*
*/
public interface Gj19ImgReader {
public void read();
}
具体产品GifReader:
package FactoryPattern;
/**
* 具体产品GifReader
* @author gong
*
*/
public class Gj19GifReader implements Gj19ImgReader{
@Override
public void read() {
System.out.println("读取gif格式的图片");
}
}
具体产品JPGReader:
package FactoryPattern;
/**
* 具体产品JPGReader
* @author gong
*
*/
public class Gj19JPGReader implements Gj19ImgReader{
@Override
public void read() {
System.out.println("读取JPG格式的图片");
}
}
抽象工厂ImgReaderFactory:
package FactoryPattern;
/**
* 抽象工厂ImgReaderFactory
* @author gong
*
*/
public interface Gj19ImgReaderFactory {
public Gj19ImgReader getGj19ImgReader();
}
具体工厂GifReaderFactory:
package FactoryPattern;
/**
* 具体工厂GifReaderFactory
* @author gong
*
*/
public class Gj19GifReaderFactory implements Gj19ImgReaderFactory {
@Override
public Gj19ImgReader getGj19ImgReader() {
Gj19ImgReader gj19ImgReader = new Gj19GifReader();
return gj19ImgReader;
}
}
具体工厂JPGReaderFactory:
package FactoryPattern;
/**
* 具体工厂JPGReaderFactory
* @author gong
*
*/
public class Gj19JPGReaderFactory implements Gj19ImgReaderFactory {
@Override
public Gj19ImgReader getGj19ImgReader() {
Gj19ImgReader gj19ImgReader = new Gj19JPGReader();
return gj19ImgReader;
}
}
测试工厂模式:
package FactoryPattern;
/**
* 测试工厂模式
* @author gong
*
*/
public class Gj19Test {
public static void main(String[] args) {
Gj19ImgReaderFactory gj19ImgReaderFactory = new Gj19GifReaderFactory();
gj19ImgReaderFactory.getGj19ImgReader().read();
}
}
五、运行结果: