Java---设计模块(工厂方法)

简介: 场景和问题 Java程序开发讲究面向接口编程,隐藏具体的实现类,可是如何得到接口呢?工厂类的命名规范:***Factory 单例工厂方法的命名规范:getInstance()工厂的本质是“选择实现”工厂、接口和实现类之间的技术边界:工厂只负责选择实现,实现类才做真正的实现,而接口是限定到底实现什么东西和返回什么东西,三者之间分工明确、各负其责。

场景和问题
Java程序开发讲究面向接口编程,隐藏具体的实现类,可是如何得到接口呢?

工厂类的命名规范:***Factory
单例工厂方法的命名规范:getInstance()

工厂的本质是“选择实现”

工厂、接口和实现类之间的技术边界:工厂只负责选择实现,实现类才做真正的实现,而接口是限定到底实现什么东西和返回什么东西,三者之间分工明确、各负其责。

下面为简单的工厂方法介绍和源代码:
接口DepApi :

package cn.hncu.pattern.factory.dep;
//接口
public interface DepApi {
    public String t1();
}

实例1 Deplmpl1 :

package cn.hncu.pattern.factory.dep;

public class Deplmpl1 implements DepApi{

    @Override
    public String t1() {
        System.out.println("DepApi--Deplmpl1.t1()...");
        return "Deplmpl1_t1()";
    }

    //下面这个方法在外面访问不到,因为被接口隔离了
    public String t2() {
        System.out.println("DepApi--Deplmpl1.t2()...");
        return "Deplmpl1_t2()";
    }



}

实例2 Deplmpl2 :

package cn.hncu.pattern.factory.dep;

public class Deplmpl2 implements DepApi{

    @Override
    public String t1() {
        System.out.println("DepApi--Deplmpl2.t1()...");
        return "Deplmpl2_t1()";
    }

    //下面这个方法在外面访问不到,因为被接口隔离了
    public String t2() {
        System.out.println("DepApi--Deplmpl2.t2()...");
        return "Deplmpl2_t2()";
    }



}

工厂类 DepFactory :

package cn.hncu.pattern.factory.dep;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

//工厂真正的作用是:选择实现
public class DepFactory {

    // 工厂方法,命名规范:createDepApi,getDepApi,getDepInstance
    public static DepApi getDepApi(){
        Properties p = new Properties();
        int type=1;
        InputStream inStream;
        try {
            inStream = new FileInputStream("a.properties");
            p.load(inStream);
            type = Integer.parseInt(p.getProperty("type"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        if(type==1){
            return new Deplmpl1();
        }
        if(type==2){
            return new Deplmpl2();
        }
        return null;
    }

}

测试 Client :

package cn.hncu.pattern.factory;

import cn.hncu.pattern.factory.dep.DepApi;
import cn.hncu.pattern.factory.dep.DepFactory;

public class Client {
    public static void main(String[] args) {

        DepApi da = DepFactory.getDepApi();
        da.t1();//修改配置文件a.properties就可达到修改调用方法的目的,而不用修改源代码
        //da.t2(); //实现类当中的t2()方法已经被接口封装隔离了,访问不了
    }

}

a.properties文件里面的内容:
此为配置文件,修改配置文件不叫修改源代码的。

type=1

此时的输出结果为;

DepApi--Deplmpl1.t1()...

只修改配置文件:

type=2

此时的输出结果为:

DepApi--Deplmpl2.t1()...
目录
相关文章
|
25天前
|
缓存 Java
java开发常用模块——缓存模块
java开发常用模块——缓存模块
|
15天前
|
设计模式 Java 测试技术
Java 模块解耦的设计策略
Java 模块解耦的设计策略
26 1
|
25天前
|
移动开发 前端开发 JavaScript
Java 验证码模块
Java 验证码模块
|
4月前
|
设计模式 Java 数据库连接
Java设计模式--简单工厂、工厂方法和抽象工厂之间的区别
设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。那么三者有什么区别呢?
99 1
Java设计模式--简单工厂、工厂方法和抽象工厂之间的区别
|
6月前
|
Java
java模块导出与导入
java模块导出与导入
58 0
|
6月前
|
Java API 开发者
Java 9中引入的模块系统是什么?它有什么作用?
Java 9中引入的模块系统是什么?它有什么作用?
|
6月前
|
JSON 监控 安全
处理大规模数据流:使用Java编写公司聊天监控软件的数据处理模块
在今天的数字时代,企业越来越依赖聊天公司监控软件来确保员工的上网安全、保护敏感信息,并监测内部通信。为了更有效地处理和分析这些大规模数据流,公司通常需要自定义的数据处理模块。在本文中,我们将探讨如何使用Java编写这样的模块,同时确保跨平台部署。
174 0
|
9月前
|
Java Maven
Java——maven多模块项目打jar包如何设置启动类
Java——maven多模块项目打jar包如何设置启动类
|
9月前
|
Java Maven
Java——maven多模块项目打jar包如何把依赖包也打包进去
Java——maven多模块项目打jar包如何把依赖包也打包进去
|
Java Spring 容器
Java 最常见的面试题:spring 有哪些主要模块?
Java 最常见的面试题:spring 有哪些主要模块?
Java 最常见的面试题:spring 有哪些主要模块?