Design Pattern - Factory Method Pattern

 Now we need to design a program to read a variety of different types of picture formats, and design a picture reader (ImageReader) for each picture format , such as GIF picture reader (GifReader) is used to read pictures in GIF format , JPG picture reader (JpgReader) is used to read pictures in JPG format. The image reader object is created by the image reader factory ImageReaderFactory . ImageReaderFactory is an abstract class that defines the factory method for creating image readers. Its subclasses GifReaderFactory and JpgReaderFactory are used to create specific image reader objects. Design the program using the factory method pattern, draw the class diagram and program the mock implementation. The flexibility and scalability of the system need to be fully considered.

Class Diagram:

Implementation code:

ImageReadeFactary类:

public abstract class ImageReaderFactory {

     public abstract ImageReader createImageReadeer();

}

 

GifReaderFactory class:

public class GifReaderFactory extends ImageReaderFactory {

    public ImageReader createImageReadeer() {

        GifReader gifReader = new GifReader();

        return gifReader;

    }

}

 

JpgReaderFactory  class:

public class JpgReaderFactory extends ImageReaderFactory {

    public ImageReader createImageReadeer() {

      JpgReader jpgReader = new JpgReader();

        return jpgReader;

    }

}

 

ImageReader  class:

public abstract class ImageReader {

    public  void  readImage(){}

}

 

GifReader  class:

public class GifReader extends ImageReader{

    public  void  readImage(){

        System.out.println(" Read pictures through GifReader ");

    }

}

 

 

JpgReader  class:

public class JpgReader extends ImageReader{

    public  void  readImage(){

        System.out.println(" Read pictures through JpgReader ");

    }

}

 

XMLUtil  class:

import org.w3c.dom.Document;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

 

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import java.io.File;

 

public class XMLUtil {

    //该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象

    public static Object getBean() throws Exception {

        //创建DOM文档对象

        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

        Document document;

        document = documentBuilder.parse(new File("config.xml"));

        //获取包含类名的文本结点

        NodeList nodeList = document.getElementsByTagName("imageType");

        Node imageTypeNode = nodeList.item(0).getFirstChild();

        String imageType = imageTypeNode.getNodeValue().trim();

        //通过类名生成实例对象并将其返回

        Class clazz  = Class.forName(imageType+"ReaderFactory");

        Object object = clazz.newInstance();

        return object;

    }

}

 

 

Main 类(客户端):

public class Main {

 

    public static void main(String[] args) {

        ImageReaderFactory imageReaderFactory = null;

        ImageReader imageReader;

        try {

            imageReaderFactory = (ImageReaderFactory)XMLUtil.getBean();

 

        } catch (Exception e) {

            e.printStackTrace();

        }

        imageReader = imageReaderFactory.createImageReadeer();

        imageReader.readImage();

 

    }

}

 

 


Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324735314&siteId=291194637