欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

封装服务提供者框架

程序员文章站 2022-06-13 20:22:28
...

服务提供者框架

服务提供者框架(Service Provider framework) :多个服务提供者实现一个服务,系统为服务提供者的客户端提供多个实现,并把他们从中解耦出来(静态工厂方法是服务提供者框架的基础) (来自百度百科)

图解服务提供者框架

封装服务提供者框架

下边就写一个例子进行说明

1、服务定义接口

package jdbc;

/**
 * 定义服务接口
 */
public interface JDBCInterface {

    //连接JDBC
    void connectionJDBC();

    //断开JDBC
    void disConnectionJDBC();
}

2、服务提供者接口

package jdbc;

/**
 * 服务提供者接口
 */
public interface JDBCProviderInterface {

    JDBCInterface getService();//得到定义的服务实例对象
}

3 、实现定义的服务类

package jdbc;

/**
 * 实现服务定义接口
 */
public class JDBCInterfaceImpl implements JDBCInterface {
    @Override
    public void connectionJDBC() {
        System.out.println("连接JDBC");
    }

    @Override
    public void disConnectionJDBC() {
        System.out.println("断开JDBC");
    }
}

4、实现提供者服务类

package jdbc;

/**
 * 服务提供者接口的实现类
 */
public class JDBCProviderInterfaceImpl implements JDBCProviderInterface{
    static {
        JDBCManager.registerProvider("jdbc",new JDBCProviderInterfaceImpl());
    }
    @Override
    public JDBCInterface getService() {
        return new JDBCInterfaceImpl();
    }
}

5、注册管理类

package jdbc;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class JDBCManager {

    private static final Map<String,JDBCProviderInterface> providers = new ConcurrentHashMap<>();
    public static void registerProvider(String name,JDBCProviderInterface providerInterface){
        providers.put(name,providerInterface);
    }

    public static JDBCInterface getService(String name){
        JDBCProviderInterface anInterface = providers.get(name);
        if(anInterface == null){
            throw new IllegalArgumentException("注册失败或未注册");
        }
        return anInterface.getService();
    }
}

6、测试类

package jdbc;

public class Test {
    public static void main(String [] args){
        try {
            Class.forName("jdbc.JDBCProviderInterfaceImpl");
            JDBCInterface jdbc = JDBCManager.getService("jdbc");
            jdbc.connectionJDBC();
            jdbc.disConnectionJDBC();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

7、运行结果

封装服务提供者框架

OK,这是服务提供者框架的小Demo 当然运用到项目中肯定不是一件简单的事情,但是他却适合用于与给别人提供模块性的功能,当然它从耦合度来说是非常不错的,值得我们学习和使用,Android 也需要的,虽然我就是Android,OK