工厂模式

一、题目:

现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器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();
    }
}

五、运行结果:

结果


版权声明:本文为qq_33220449原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_33220449/article/details/54602908