zoukankan      html  css  js  c++  java
  • 工厂模式的简单实现

    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
  • 相关阅读:
    【转】C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)
    【转】第三方控件安装方法
    【jQuery插件】chackTextarea类似于新浪腾讯微博文本域字符数判断
    【转】关于wBox iFrame回调关闭问题的解决方案
    【转】jquery插件
    db4o助手 do4oHelper
    【转】C# 中文URL编码
    【转】C#集合之Hashtable
    【转】Web页面导出标准的Excel/Word/txt的代码实现
    jQuery图片居中裁切效果
  • 原文地址:https://www.cnblogs.com/mature1021/p/10214744.html
Copyright © 2011-2022 走看看