Java設計モードstructure Facade
2331 ワード
Facadeモードの定義:サブシステムのインタフェースのセットに一致するインタフェースを提供する.
Facadeの典型的な応用はデータベースJDBCの応用である.
上記の例はJspの中で最も一般的なデータベースに対する操作方法である.
アプリケーションでは、データベースの操作が常に必要であり、毎回上記のコードを書くのは面倒であるに違いない、その中の変わらない部分を抽出してインタフェースを作る必要があり、facadeの外観オブジェクトを導入する.後でClassを交換したらforNameのも便利です.例えばMysqlデータベースからOracleデータベースに変更するには、facadeインタフェースのdriverを交換すればいいです.
このインタフェースを使用すると、前例のFacadeインタフェースのプログラムを次のように変更できます.
非常に簡単で、すべてのプログラムがデータベースにアクセスするのはこのインタフェースを使用して、システムの複雑さを低減して、柔軟性を増加したことがわかります.
接続プールを使用する場合もfacadeインタフェースに対して変更すればよい.
例2:
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の
このインタフェースを使用すると、前例の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();
}
}