工厂模式的简单实现

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

猜你喜欢

转载自www.cnblogs.com/mature1021/p/10214744.html