Javaは、反射の練習を学びます

要件:コンピュータのマザーボード、明らかではないが、どのような拡張後の特定の拡張子が、拡張子が機能オン、オフにする必要があります。

分析:自分自身の機能と拡張は、機能拡張は、ルールを提供して実行するすべての規則を遵守します実行するマザーボードは、カテゴリによって反射されました

理事会コード

1つの パブリック クラスメインボード{
 2      公共 ボイドラン(){
 3      のSystem.out.println( "メインボードラン..." )。
4      }
 5      
6      公共 ボイドusePCI(PCIのP){
 7      場合(P =!NULL ){
 8          p.open()。
9          p.close()。
10      }
 11      }
 12 }

拡張ルールインタフェース

1つの パブリック インターフェイスPCI {
 2      公共 ボイドオープン();
3      公共 に近いです();
4 }

ルールの拡大を達成するために、エンティティインタフェース

1  パブリック クラスサウンドカード実装PCI {
 2  
3      @Override
 4      公共 ボイド(){オープン
 5      のSystem.out.println( "サウンドオープン" )。
6      }
 7  
8      @Override
 9      公共 ボイド近い(){
 10      のSystem.out.println( "サウンドクローズ" )。
11      }
 12 }
1  パブリック クラスネットカード実装PCI {
 2  
3      @Override
 4      公共 のボイドオープン(){
 5      のSystem.out.println( "ネットラン..." );
6      }
 7  
8      @Override
 9      公共 ボイド近い(){
 10      のSystem.out.println( "ネットラン..." )。
11      }
 12 }

オブジェクトの設定ファイルをインスタンス化:拡張メカニズムを大きくすると、リフレクションを使用して実装しました

プロファイル(pci.properties)

PCI1 = cn.marw.reflect.test.SoundCard 
PCI2 = cn.marw.reflect.test.NetCard

メインプログラムの実装コード

パブリック 静的 ボイドメイン(文字列[]引数)をスロー例外{ 
    メインボードmBoard = 新しいメインボードを()。
    mBoard.run(); 
    
    ファイルたconfigFileは = 新しいファイル( "pci.properties" ); 
    プロパティプロパティ = 新しいプロパティ(); 
    FileInputStreamのFIS = 新しいFileInputStreamを(たconfigFile)。
    
    Properties.load(FIS)。
    
    INT ; X <properties.size(); X = 0のx ++ ){ 
        文字列picName = properties.getProperty( "PCI" +(X + 1 ))。
        
        クラスclazz =Class.forNameの(picName)。
        
        PCI、PCI = (PCI)clazz.newInstance(); 
        
        mBoard.usePCI(PCI)。
    } 
    fis.close()。
    }

結果

 

おすすめ

転載: www.cnblogs.com/WarBlog/p/12156357.html