zoukankan      html  css  js  c++  java
  • 工厂模式

    #工厂
    package com.spring.base; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Properties; public class ServiceFactory { private static final String CONF_FILE_NAME="conf.properties"; private static Properties prop; private static Map<String,Object> beanContainer; //静态代码块作用:每次初始化这个类时只加载配置文件 static { try { beanContainer=new HashMap<>(); prop=new Properties(); prop.load(ServiceFactory.class.getClassLoader().getResourceAsStream(CONF_FILE_NAME)); } catch (IOException e) { // e.printStackTrace(); throw new IllegalArgumentException(e); } } public static <T> T getService(Class<T> clazz){ //增加配置文件中key-value的缓存,多次调用同一个key时,不需要再重新使用反射 if (beanContainer.containsKey(clazz.getSimpleName())) { return (T) beanContainer.get(clazz.getSimpleName()); } try { String className = prop.getProperty(clazz.getSimpleName()); Class<?> obj = Class.forName(className); beanContainer.put(clazz.getSimpleName(), obj); return (T) obj.newInstance(); // System.out.println("++++"+className); } catch (Exception e) { throw new IllegalArgumentException(e); } } public static void main(String[] args) { getService(AccountService.class); } }



      
    #具体接口和实现类
    package com.spring.base; public interface AccountService { void insetAccout(String msg); }

      

    package com.spring.base.impl;
    
    import com.spring.base.AccountService;
    
    public class AccountServiceImpl implements AccountService {
        @Override
        public void insetAccout(String msg) {
            System.out.println("=====AccountService==="+msg);;
        }
    }
    

     调用入口: 

    package com.spring.base;
    
    public class App {
    
    
        public static void main(String[] args) {
    
            ServiceFactory serviceFactory=new ServiceFactory();
    
            AccountService accountService1=serviceFactory.getService(AccountService.class);
            accountService1.insetAccout("666");
            AccountService accountservice2=serviceFactory.getService(AccountService.class);
            accountservice2.insetAccout("777");
    
    
        }
    }
    

      配置文件:

    AccountService=com.spring.base.impl.AccountServiceImpl
  • 相关阅读:
    sparql学习sparql示例、dbpedia在线验证
    中国绿卡
    逾期率的水有多深,你知道吗?
    ICO和区块链区别
    What are the benefits to using anonymous functions instead of named functions for callbacks and parameters in JavaScript event code?
    Link static data in sql source control
    sql data compare
    viewbag
    多态的实际使用
    win10 sedlauncher.exe占用cpu处理
  • 原文地址:https://www.cnblogs.com/zzzao/p/11551105.html
Copyright © 2011-2022 走看看