オブジェクトの静的ファクトリの作成方法

2910 ワード

a、静的ファクトリは関連する名前を定義することができ、コンストラクタはクラスの名前bと重複しなければならない.呼び出すたびにオブジェクトを作成するのではなく、必要に応じてカスタマイズすることができ、インスタンスキャッシュを作成することができ、オブジェクトcの重複作成を回避し、戻り値をカスタマイズすることができる.サブタイプのオブジェクト(サービスプロバイダフレームワークの基礎)d、簡略化コード、サービスプロバイダフレームワーク設計思想(JDBC、JMS設計)は以下のように設計できる:シーン:会社がゲートカードをタッチして//対外サービスを提供するインタフェース(インタフェースA):DoorInterface-------->ゲートウェイ
          package com.liangliang.coreJava.OPPTest;
            /**
             *            
             * @author sunliangliang
             *     
             */
            public interface DoorInterface {
                public boolean in();
                public boolean out();
            }
          //   :
        public class DoorInterfaceImpl implements DoorInterface{
                @Override
                public boolean in() {
                    /**       */
                    System.out.println("------------>inout
      //        (   A)   :    
                        /**
             *        
             * @author sunliangliang
             *
             */
            public interface DoorProviderInterface {
                public DoorInterface getInterface();
            }
      //   :
            public class DoorProviderInterfaceImpl implements DoorProviderInterface{
                static{
                    DoorProviderManager.register("SOHU", new DoorProviderInterfaceImpl());
                }
                @Override
                public DoorInterface getInterface() {
                    
                    return new DoorInterfaceImpl();
                }

            }
      //   
            public class DoorProviderManager {
                private DoorProviderManager(){}
                private static final Map providers=
                            new ConcurrentHashMap();
                public static void register(String name,DoorProviderInterface doorProvider){
                    providers.put(name, doorProvider);
                }
                public static DoorInterface getInstance(String name){
                    DoorProviderInterface doorProvider=providers.get(name);
                    return doorProvider.getInterface();
                }
            }
         
        public class ClientTest {
            public static void main(String[] args) throws ClassNotFoundException {
                Class.forName("com.liangliang.coreJava.OPPTest.DoorProviderInterfaceImpl");
                DoorInterface door=DoorProviderManager.getInstance("SOHU");
                door.in();
                door.out();
            }
        }