• 静态工厂方法+服务提供者框架模板


    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";
    				}
    			};
    		}
    	};
    }
    
  • 相关阅读:
    开启sftp服务日志并限制sftp访问目录
    Django-16-安装前端项目
    sql
    Django-15-用户模块、认证授权、session会话认证和token认证
    Django-14-项目工程搭建
    开发小技巧
    Django-13-类视图设计原则
    Django-11-自动生成routers路由、自定义action
    Django-9-序列化器中各种校验方式
    Django—问题—生成迁移脚本时报错:You are trying to add a non-nullable field 'gender' to interfaces without a default
  • 原文地址:https://www.cnblogs.com/birdstudio/p/7491033.html
Copyright © 2020-2023  润新知