定义

         定义一个用于创建对象的接口,让子类决定实例化哪一个类,FactoryMethod使一个类的实例化延迟到其子类。

 

java设计模式--工厂模式

 

 

/**
* 导出内容成为文件
*/
public interface ExportFileApi{
    /**
    * 导出内容成为文件
    */
    public boolean export(String data);
}

//导出成文本文件格式
public class ExportTxtFile implements ExportFileApi{
    public boolean export(String data){
        System.out.println("导出数据"+data+"到文本文件");
        return true;
    }
}

//导出成文本DB格式
public class ExportDB implements ExportFileApi{
    public boolean export(String data){
        System.out.println("导出数据"+data+"到DB文件");
        return true;
    }
}
/**
* 实现导出数据的业务功能对象
*/
public class ExportOperate{
    /**
    * 导出文件
    */
    public boolean export(int type,String data){
        //先完成各种导出数据前的准备工作
        System.out.println("now 进行数据校验");
        System.out.println("now 进行数据转换");
        System.out.println("now 进行数据格式的封装);
        //然后才真正的去导出
        ExportFileApi api = null;
        /**
        这是写了很多逻辑业务,调用哪种对象不应该在这写,扩展不易
        if(type === 1){
            api = new ExportTxtFile();
        }else if(type == 2){
            api = new ExportDB();
        }*/
        api = factoryMethod();
        return api.export(data);
    }

    /**
    * 工厂方法,创建导出的文件对象的接口对象
    */
    protected abstract ExportFileApi factoryMethod();
}
//具体的创建器实现对象,实现创建导出成数据库备份文件形式的对象
public class ExportDBOprate extends ExportOperate{
    protected ExportFileApi factoryMethod(){
        return new ExportDB();
    }
}



//具体的创建器实现对象,实现创建导出成文本文件形式的对象
public class ExportTxtFileOprate extends ExportOperate{
    protected ExportFileApi factoryMethod(){
        return new ExportTxtFile();
    }
}
//客户端
public class Client{
    public static void main(String[] args){
        //ExportOperate operate = new ExportOperate();
        //operate.export(1,"测试数据");
    
        ExportOperate operate = new ExportDBOperate();
        operate.export("测试数据");
    }
}

 

认识工厂方法模式

1:工厂方法模式的功能

             工厂方法的主要功能是让父类在不知道具体实现的情况下,完成自身的功能调用,而具体的实现延迟到子类来实现。

2:实现成抽象类

             工厂方法的实现中,通常父类会是一个抽象类,里面包含创建所需对象的抽象方法,这些抽象方法就是工厂方法。

3:实现成具体的类

             也可以把父类实现成为一个具体的类,这种情况下,通常是在父类中提供获取所需对象的默认实现方法,这样就算没有具体的子类,也能运行。

4:工厂方法的参数和返回值

            工厂方法的实现中,可能需要参数,以便解决到底选用哪一种具体的实现。一般工厂方法返回的是被创建对象的接口对象,当然也可以是抽象类或者一个具体的类的实例。

5:谁来使用工厂方法创建的对象

           (1)在工厂方法模式里面,应该是Creator中的其他方法在使用工厂方法创建的对象

           (2)客户端应该是使用Creator对象,或者是使用由Creator创建出来的对象,这个时候工厂方法创建的对象,是Creator中的某些方法使用。

 

工厂方法模式与IoC/DI

       依赖注入:应用程序依赖容器创建并注入它所需要的外部资源。

       控制反转:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。

 

 

 

 

 

 

 

相关文章:

  • 2022-01-01
  • 2021-12-14
  • 2021-06-27
  • 2021-05-31
猜你喜欢
  • 2021-06-06
  • 2021-07-03
  • 2021-06-17
  • 2021-05-11
  • 2021-06-06
  • 2022-12-23
  • 2022-12-23
  • 2021-08-07
相关资源
相似解决方案