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

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

★ 场景和问题

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()";
    }
}

实例2Deplmpl2:


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()...


目录
相关文章
|
设计模式 算法 Java
Java工厂策略模式介绍
本文介绍Java中工厂模式与策略模式的结合应用,通过工厂创建策略对象,实现灵活、可扩展的支付、折扣等业务场景,提升系统解耦与维护性。
193 3
|
5月前
|
缓存 NoSQL Java
Java 项目实操高并发电商系统核心模块实现从基础到进阶的长尾技术要点详解 Java 项目实操
本项目实战实现高并发电商系统核心模块,涵盖商品、订单与库存服务。采用Spring Boot 3、Redis 7、RabbitMQ等最新技术栈,通过秒杀场景解决库存超卖、限流熔断及分布式事务难题。结合多级缓存优化查询性能,提升系统稳定性与吞吐能力,适用于Java微服务开发进阶学习。
172 0
|
7月前
|
安全 Java API
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
|
安全 Java API
Java一分钟之——Java模块系统:模块化开发(Jigsaw)
【5月更文挑战第20天】Java 9引入了Jigsaw模块系统,改善代码组织和依赖管理。模块通过`module-info.java`定义,声明名称、导出包及依赖。常见问题包括依赖循环、未声明依赖和过度导出。避免这些问题的策略包括明确声明依赖、谨慎导出包和避免循环依赖。通过实例展示了模块间的关系,强调理解模块系统对于构建整洁、安全和可维护的Java应用的重要性。
250 5
|
Java Docker 容器
java版本学习网站又添加了一个libgdx模块
java版本学习网站之前添加了docker,想了想还是再把libgdx添加进去吧。
142 3
|
设计模式 XML 存储
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
文章详细介绍了工厂方法模式(Factory Method Pattern),这是一种创建型设计模式,用于将对象的创建过程委托给多个工厂子类中的某一个,以实现对象创建的封装和扩展性。文章通过日志记录器的实例,展示了工厂方法模式的结构、角色、时序图、代码实现、优点、缺点以及适用环境,并探讨了如何通过配置文件和Java反射机制实现工厂的动态创建。
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
|
监控 Java 关系型数据库
java版MES系统源码,后端采用 Spring Boot 多模块架构
MES系统采用Vue3的vue-element-plus-admin为后台,Spring Boot多模块架构,支持MySQL、Oracle等数据库,具备SaaS多租户功能。核心功能包括车间计划排程、工艺流程配置、生产质量管理、进度追踪、库存和排班管理等,全面覆盖生产运营关键环节。
479 0
java版MES系统源码,后端采用 Spring Boot 多模块架构
|
设计模式 Java
Java设计模式-工厂方法模式(4)
Java设计模式-工厂方法模式(4)
144 0
|
移动开发 监控 供应链
JAVA智慧工厂制造生产管理MES系统,全套源码,多端展示(app、小程序、H5、台后管理端)
一开始接触MES系统,很多人会和博主一样,对MES细节的应用不了解,这样很正常,因为MES系统相对于其他系统来讲应用比较多!
541 1
JAVA智慧工厂制造生产管理MES系统,全套源码,多端展示(app、小程序、H5、台后管理端)
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)