1. 程式人生 > >工廠模式的簡單實現

工廠模式的簡單實現

package com.youai;

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

public class Factory {
    public static final String Tag = Factory.class.getSimpleName();
    final static Map<String, Object> factory = new ConcurrentHashMap<>();

    public static <T> Object getFactory(Class<T> clazz) {
        Object object 
= null; if (factory.containsKey(clazz.getSimpleName())) { System.err.println("直接獲取:" + clazz.getSimpleName()); return factory.get(clazz.getSimpleName()); } try { object = clazz.newInstance(); factory.put(clazz.getSimpleName(), object); System.err.println(
"初始化:" + clazz.getSimpleName()); return object; } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } return object; } public static void main(String[] args) throws Exception { Test(); Thread.sleep(
10000); Test(); } public static void Test() { Send send = (Send) getFactory(Send.class); send.run(); Message message = (Message) getFactory(Message.class); message.run(); Back back = (Back) getFactory(Back.class); back.run(); } } class Send { public static final String Tag = Send.class.getSimpleName(); public Send() { } public void run() { for (int k = 0; k < 10; k++) { System.err.println(Send.Tag); } } } class Message { public static final String Tag = Message.class.getSimpleName(); public Message() { } public void run() { for (int k = 0; k < 10; k++) { System.err.println(Message.Tag); } } } class Back { public static final String Tag = Back.class.getSimpleName(); public Back() { } public void run() { for (int k = 0; k < 10; k++) { System.err.println(Back.Tag); } } } 執行: 初始化:Send Send Send Send Send Send Send Send Send Send Send 初始化:Message Message Message Message Message Message Message Message Message Message Message 初始化:Back Back Back Back Back Back Back Back Back Back Back 直接獲取:Send Send Send Send Send Send Send Send Send Send Send 直接獲取:Message Message Message Message Message Message Message Message Message Message Message 直接獲取:Back Back Back Back Back Back Back Back Back Back Back