zoukankan      html  css  js  c++  java
  • 静态工厂方法+服务提供者框架模板

    Provider.java

    public interface Provider {
    	Service newService();
    }
    

    Service.java

    public interface Service {
    	// Service-specific methods go here
    }
    

    Services.java

    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;
    
    public class Services {
    	private Services() {
           throw new AssertionError();
    	} // Prevents instantiation (Item 4)
    
    	// Maps service names to services
    	private static final Map<String, Provider> providers = new ConcurrentHashMap<String, Provider>();
    	public static final String DEFAULT_PROVIDER_NAME = "<def>";
    
    	// Provider registration API
    	public static void registerDefaultProvider(Provider p) {
    		registerProvider(DEFAULT_PROVIDER_NAME, p);
    	}
    
    	public static void registerProvider(String name, Provider p) {
    		providers.put(name, p);
    	}
    
    	// Service access API
    	public static Service newInstance() {
    		return newInstance(DEFAULT_PROVIDER_NAME);
    	}
    
    	public static Service newInstance(String name) {
    		Provider p = providers.get(name);
    		if (p == null)
    			throw new IllegalArgumentException(
    					"No provider registered with name: " + name);
    		return p.newService();
    	}
    }
    

    Test.java

    public class Test {
    	public static void main(String[] args) {
    		// Providers would execute these lines
    		Services.registerDefaultProvider(DEFAULT_PROVIDER);
    		Services.registerProvider("comp", COMP_PROVIDER);
    		Services.registerProvider("armed", ARMED_PROVIDER);
    
    		// Clients would execute these lines
    		Service s1 = Services.newInstance();
    		Service s2 = Services.newInstance("comp");
    		Service s3 = Services.newInstance("armed");
    		System.out.printf("%s, %s, %s%n", s1, s2, s3);
    	}
    
    	private static Provider DEFAULT_PROVIDER = new Provider() {
    		public Service newService() {
    			return new Service() {
    				@Override
    				public String toString() {
    					return "Default service";
    				}
    			};
    		}
    	};
    
    	private static Provider COMP_PROVIDER = new Provider() {
    		public Service newService() {
    			return new Service() {
    				@Override
    				public String toString() {
    					return "Complementary service";
    				}
    			};
    		}
    	};
    
    	private static Provider ARMED_PROVIDER = new Provider() {
    		public Service newService() {
    			return new Service() {
    				@Override
    				public String toString() {
    					return "Armed service";
    				}
    			};
    		}
    	};
    }
    
  • 相关阅读:
    http://www.cnblogs.com/Javame/p/3632473.html
    在eclipse中新建Dynamic web project时选择2.5和3.0的区别(里面涉及servlet和tomcat的问题)
    图的理解:深度优先和广度优先遍历及其 Java 实现
    解决ORA-28000: the account is locked
    [MAT]使用MAT比較多个heap dump文件
    ansible学习之--简单学习笔记1
    awk基本使用方法简单介绍
    已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行
    程序实践系列之库源码
    Android常见UI组件之ListView(二)——定制ListView
  • 原文地址:https://www.cnblogs.com/birdstudio/p/7491033.html
Copyright © 2011-2022 走看看