要件:コンピュータのマザーボード、明らかではないが、どのような拡張後の特定の拡張子が、拡張子が機能オン、オフにする必要があります。
分析:自分自身の機能と拡張は、機能拡張は、ルールを提供して実行するすべての規則を遵守します実行するマザーボードは、カテゴリによって反射されました
理事会コード
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()。 }
結果