Java設計モードstructure Facade

2331 ワード

Facadeモードの定義:サブシステムのインタフェースのセットに一致するインタフェースを提供する.
Facadeの典型的な応用はデータベースJDBCの応用である.
public class DBCompare {
  Connection conn = null;
  PreparedStatement prep = null;
  ResultSet rset = null; 
  try {
     Class.forName( "<driver>" ).newInstance();
     conn = DriverManager.getConnection( "<database>" );
    
     String sql = "SELECT * FROM <table> WHERE <column name> = ?";
     prep = conn.prepareStatement( sql );
     prep.setString( 1, "<column value>" );
     rset = prep.executeQuery();
     if( rset.next() ) {
        System.out.println( rset.getString( "<column name" ) );
     }
  } catch( SException e ) {
     e.printStackTrace();
  } finally {
     rset.close();
     prep.close();
     conn.close();
  }
}

上記の例はJspの中で最も一般的なデータベースに対する操作方法である. 
アプリケーションでは、データベースの操作が常に必要であり、毎回上記のコードを書くのは面倒であるに違いない、その中の変わらない部分を抽出してインタフェースを作る必要があり、facadeの外観オブジェクトを導入する.後でClassを交換したらforNameのも便利です.例えばMysqlデータベースからOracleデータベースに変更するには、facadeインタフェースのdriverを交換すればいいです.
このインタフェースを使用すると、前例のFacadeインタフェースのプログラムを次のように変更できます.
public class DBCompare {

  String sql = "SELECT * FROM <table> WHERE <column name> = ?";  

  try {
     Mysql msql=new mysql(sql);
     prep.setString( 1, "<column value>" );
     rset = prep.executeQuery();
     if( rset.next() ) {
        System.out.println( rset.getString( "<column name" ) );
     }
  } catch( SException e ) {
     e.printStackTrace();
  } finally {
     mysql.close();
     mysql=null;
  }
}

非常に簡単で、すべてのプログラムがデータベースにアクセスするのはこのインタフェースを使用して、システムの複雑さを低減して、柔軟性を増加したことがわかります.
接続プールを使用する場合もfacadeインタフェースに対して変更すればよい.
 
 
例2:
class Wall {
	public Wall() {
		System.out.println("Create a wall !");
	}
}

class Door {
	public Door() {
		System.out.println("Create a door !");
	}
}

class FacadeRoom {
	public void CreateRoom() {
		Wall wall1 = new Wall();
		Wall wall2 = new Wall();
		Wall wall3 = new Wall();
		Wall wall4 = new Wall();
		Door door = new Door();
	}
}
テスト
public class Facadetest {
	public static void main(String[] args) {
        FacadeRoom room = new FacadeRoom();
        room.CreateRoom();
    }
}