栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式-工厂模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式-工厂模式

意图

创建复杂对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。定义一个创建对象的接口并实现,工厂模式使其创建过程延迟到实现类进行。

实现

Client.java

package cn.ac.nuc.factory;

import java.util.logging.Logger;

public class Client {

    public static void main(String[] args) {
        IFactory iFactory = new IFactory() {
        };
        Logger.getGlobal().info(String.format("%s", iFactory.getObject("CarFactory")));
        Logger.getGlobal().info(String.format("%s", iFactory.getObject("AirFactory")));
        Logger.getGlobal().info(String.format("%s", iFactory.getObject("OptFactory")));
    }
}

IFactory.java

package cn.ac.nuc.factory;

import java.util.ServiceLoader;

public interface IFactory {

    default Object getObject(String paramClz) {
        ServiceLoader serviceLoader = ServiceLoader.load(IFactory.class);
        for (var loader : serviceLoader) {
            if (paramClz.equals(loader.getClass().getSimpleName()))
                return loader.newObject().getName();
        }
        return newObject().getName();
    }

    default Product newObject() {
        return new Product() {
        };
    }

}

interface Product {

    default String getName() {
        return "default";
    }
    // more methods
}

CarFactory.java

package cn.ac.nuc.factory;

public class CarFactory implements IFactory {

    @Override
    public Product newObject() {
        // fold
        return new Product() {
            @Override
            public String getName() {
                return "car";
            }
        };
    }

    public CarFactory() {
    }
}

通过 SPI 机制,将实现类注册到接口中。

meta-INF/services/cn.ac.nuc.factory.IFactory

cn.ac.nuc.factory.CarFactory
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293102.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号