• 工厂模式的简单实现


    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
  • 相关阅读:
    memcached与.NET的融合使用(二)
    memcached与.NET的融合使用(一)
    使用window2003安装邮件服务器最新实际操作记录
    2014 -> 2015
    数据挖掘入门 资料和步骤
    CSDN 论坛招聘区是不是有潜规则?在Cnblog招个人试试...
    C#薪水和前途
    面试准备
    面试准备
    面试准备
  • 原文地址:https://www.cnblogs.com/mature1021/p/10214744.html
Copyright © 2020-2023  润新知