重学设计模式之工厂模式

目录

  • 工厂模式定义
  • 使用场景
  • 代码实现

定义

工厂模式是定义一个用于创建对象的接口,让子类决定实例化那个类。

使用场景

  1. 任何需要生成复杂对象的地方,都可以使用工厂模式。
  2. 在不同条件下创建不同实例。

代码实现

以下为数据存储业务中使用工厂模式到代码实现。

  • 抽象产品类定义操作方法
public abstract class DataHandler {

    public abstract void add(String id, String name);

    public abstract void delete(String id);

    public abstract void update(String id, String name);

    public abstract String query(String id);
}
复制代码
  • 三种不同存储方式(文件、xml、数据库)的代码实现。
public class FileHandler extends DataHandler{
    @Override
    public void add(String id, String name) {

    }

    @Override
    public void delete(String id) {

    }

    @Override
    public void update(String id, String name) {

    }

    @Override
    public String query(String id) {
        return "FileHandler";
    }
}
复制代码
public class XmlHandler extends DataHandler{
    @Override
    public void add(String id, String name) {

    }

    @Override
    public void delete(String id) {

    }

    @Override
    public void update(String id, String name) {

    }

    @Override
    public String query(String id) {
        return "XmlHandler";
    }
}
复制代码
public class DBHandler extends DataHandler {
    @Override
    public void add(String id, String name) {

    }

    @Override
    public void delete(String id) {

    }

    @Override
    public void update(String id, String name) {

    }

    @Override
    public String query(String id) {
        return "DBHandler";
    }
}
复制代码
  • 工厂类
public class DataFactory {

    public static <T extends DataHandler> T getDataHandler(Class<T> tClass) {
        DataHandler handler = null;
        try {
            handler = (DataHandler) Class.forName(tClass.getName()).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (T) handler;
    }
}
复制代码
  • 工厂模式的使用
public class DataHandlerTest {

    @Test
    public void testFactory() {
        FileHandler fileHandler = DataFactory.getDataHandler(FileHandler.class);
        System.out.println("FileHandler query result =  " + fileHandler.query("Test"));

        XmlHandler xmlHandler = DataFactory.getDataHandler(XmlHandler.class);
        System.out.println("XmlHandler query result =   " + xmlHandler.query("Test"));

        DBHandler dbHandler = DataFactory.getDataHandler(DBHandler.class);
        System.out.println("FileHandler query result =  " + dbHandler.query("Test"));
    }
}

FileHandler query result =  FileHandler
XmlHandler query result =   XmlHandler
FileHandler query result =  DBHandler
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享