日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

sql中如何统计各种零件的总数量_如何应用GOF设计模式中的构建者模式创建复合对象实例...

發布時間:2025/1/21 asp.net 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql中如何统计各种零件的总数量_如何应用GOF设计模式中的构建者模式创建复合对象实例... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

軟件項目實訓及課程設計指導——如何應用GOF設計模式中的構建者模式創建復合對象實例

1、GOF設計模式中的構建者模式

構建者設計模式能夠將一個復雜對象(它一般為組合類)的構建過程與它的表示部件相互分離,使得同樣的構建過程可以創建出不同的表示部件——也就是希望所獲得的目標組合對象(一般為大對象)不依賴于組成它的各個部件子對象。

從而可以分離和解耦"過程"和"部件"——為了將構建復合對象的"過程"和它的"部件"解耦——也就是實現將"零部件生產"和復合對象的"生產過程"相互分離,使得某個"過程"能夠應用于不同的"復合對象"的創建工作。

2、應用構建者設計模式的主要目的

構建者設計模式是滿足面向對象OOP類設計中的"開放—封閉"設計原則的——由于一個復合對象是由各個部分的子對象所組成的,同時各個子對象部分又會經常變化,但組合在一起的算法(規則)卻相對穩定。封裝隔離這個復雜對象的各個變化的子對象部分,從而保持組合這些對象的算法的穩定性。

由于將各個零部件對象組合成為一個大的對象過程往往是很復雜的(比如汽車的總裝配過程),為此可以將這些"零件"的組合過程"外部化"到一個稱作創建者的對象中,創建者返還給客戶端的是一個全部零件都建造完畢的最終產品對象。

3、構建者設計模式的程序代碼實現示例

下面以創建JDBC數據庫訪問編程中的Statement語句對象實例為示例,為讀者說明構建者設計模式的具體含義和詳細的編程實現代碼。為了方便讀者閱讀如下的程序代碼示例,作者再附錄出如下示例圖。它為構建者設計模式的UML類圖,從UML類圖中可以了解到構建者設計模式在編程實現方面的核心要求是在指導者Director類中,內聚一個建造者對象。

(1)設計構建者接口StatementBuilder

在構建者接口中定義構建的基本過程和各個過程中所涉及的功能方法,請見下面的程序代碼中的StatementBuilder接口代碼示例——構建者接口StatementBuilder的代碼示例。

package com.px1987.builderPattern;import java.sql.*;public interface StatementBuilder { public void loadJDBCDriverClass(); public void connectionToDB(); public void createStatement(); public Statement getStatement();}

該接口定義如何創建復雜對象的各個部件,應該在此接口中聲明兩種類型的方法:其一是建造各個部件的方法,另一個是返回復合對象(組裝成品結果)的方法。

(2)針對MySQL數據庫系統設計一個具體的構建者MySQLStatementBuilder

下面則是根據具體的應用環境分別構造出構建者接口StatementBuilder的不同實現類,在該實現類中實現創建各個具體部件的方法,并提供一個可以重新獲取裝配后的結果產品的具體實現。下面的程序代碼中的代碼代表針對MySQL數據庫系統的一個具體的構建者MySQLStatementBuilder類的程序代碼——構建者接口StatementBuilder的實現類的代碼示例。

package com.px1987.builderPattern;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class MySQLStatementBuilder implements StatementBuilder { Connection con = null; Statement oneStatement=null; public MySQLStatementBuilder() { } public void loadJDBCDriverClass() { try { Class.forName("com.mysql.jdbc.Driver"); } catch (java.lang.ClassNotFoundException e) { System.out.println("異常信息為:"+e.getMessage()); } } public void connectionToDB() { try { con = DriverManager.getConnection("jdbc:mysql://localhost:3306/webbank","root","root"); } catch (java.sql.SQLException e) { System.out.println("不能正確地連接數據庫并且出現SQLException"); } } public void createStatement() { try{ oneStatement=con.createStatement(); } catch (java.sql.SQLException e) { System.out.println("不能正確地創建Statement對象"); } } public Statement getStatement(){ return oneStatement; }}

(3)針對微軟MS SQLServer2000數據庫系統設計一個具體的構建者MSSQLServerStatementBuilder

下面的程序代碼中的代碼代表針對微軟MS SQLServer2000數據庫系統的一個具體的構建者MSSQLServerStatementBuilder類的程序代碼——如下的程序代碼為某個具體的構建者MSSQLServerStatementBuilder類的代碼示例。

package com.px1987.builderPattern;import java.sql.*;public class MSSQLServerStatementBuilder implements StatementBuilder{ Connection con = null; Statement oneStatement=null; public MSSQLServerStatementBuilder() { } public void loadJDBCDriverClass() { try { Class.forName("net.sourceforge.jtds.jdbc.Driver"); } catch (java.lang.ClassNotFoundException e) { System.out.println("異常信息為:"+e.getMessage()); } } public void connectionToDB() { try { con = DriverManager.getConnection("jdbc:jtds:sqlserver://127.0.0.1:1433/webbank", "sa","1234"); } catch (java.sql.SQLException e) { System.out.println("不能正確地連接數據庫并且出現SQLException"); } } public void createStatement() { try{ oneStatement=con.createStatement(); } catch (java.sql.SQLException e) { System.out.println("不能正確地創建Statement對象"); } } public Statement getStatement(){ return oneStatement; }}

(4)設計一個指導者StatementDirector類

構建者設計模式中的"指導者"有點類似于電影導演的角色,負責對最終的產品對象的總裝配。用指導者StatementDirector類構建最后的復雜對象,并實現如何將部件最后組裝成成品(參見其中的constructStatement()方法內的代碼示例)。

請見下面的程序代碼示例中的constructStatement方法代碼——指導者StatementDirector類的代碼示例。

package com.px1987.builderPattern;public class StatementDirector { StatementBuilder oneStatementBuilder=null; public StatementDirector() { } public StatementDirector(StatementBuilder oneStatementBuilder){ this.oneStatementBuilder=oneStatementBuilder; } public void constructStatement(){ //下面為創建出Statement對象的基本流程,該流程適應于各種數據庫類型,但不同的數據庫在三個部分中又有差別 oneStatementBuilder.loadJDBCDriverClass(); oneStatementBuilder.connectionToDB(); oneStatementBuilder.createStatement(); }}

(5)設計一個創建構建者對象實例的StatementBuilderFactory類

通過該工廠類StatementBuilderFactory創建出不同的構建者對象實例以包裝對它的創建過程和創建邏輯的細節,請見 下面的程序代碼中的創建構建者對象實例的工廠類StatementBuilderFactory的代碼示例——創建構建者對象實例的StatementBuilderFactory類的代碼示例。

package com.px1987.builderPattern;public class StatementBuilderFactory { public static final int MSSQLServerStatementBuilder=1; public static final int MySQLStatementBuilder=2; public static StatementBuilder newStatementBuilderInstance(int StatementBuilderKind){ StatementBuilder oneStatementBuilder=null; switch(StatementBuilderKind){ case 1: oneStatementBuilder=new MSSQLServerStatementBuilder(); break; case 2: oneStatementBuilder=new MySQLStatementBuilder(); break; } return oneStatementBuilder; }}

提供該工廠類的主要目的是避免在客戶端中涉及對具體的StatementBuilder接口的各個不同的實現類的具體耦合。如下為設計一個測試的功能類BuilderPatternTest 的代碼示例。

package com.px1987.builderPattern;import java.sql.*;public class BuilderPatternTest { public BuilderPatternTest() { } public static void main(String[] args) { StatementBuilder oneStatementBuilder= StatementBuilderFactory.newStatementBuilderInstance( StatementBuilderFactory.MySQLStatementBuilder); StatementDirector oneStatementDirector=new StatementDirector(oneStatementBuilder); oneStatementDirector.constructStatement(); Statement oneStatement=oneStatementBuilder.getStatement(); if(oneStatement!=null) { System.out.println("正確地構建出MySQL的JDBC Statement類的對象實例"); } else{ System.out.println("沒有構建出MySQL的JDBC Statement類的對象實例"); } oneStatementBuilder=StatementBuilderFactory.newStatementBuilderInstance( StatementBuilderFactory.MSSQLServerStatementBuilder); oneStatementDirector=new StatementDirector(oneStatementBuilder); oneStatementDirector.constructStatement(); oneStatement=oneStatementBuilder.getStatement(); if(oneStatement!=null) { System.out.println("正確地構建出SQLServer的Statement類的對象實例"); } else{ System.out.println("沒有構建出SQLServer的Statement類的對象實例"); } }}

(7)執行該測試功能BuilderPatternTest類的代碼

在MyEclipse工具中直接以Java應用程序的方式執行該測試功能BuilderPatternTest類的代碼,將出現如下圖所示的結果。

通過該程序代碼的實現示例,讀者應該對構建者設計模式的特點——"客戶只需要通過指定復雜對象的類型和內容來創建出該復雜的對象,而不必需要知道其創建的實現細節過程",有所體驗!

軟件項目實訓及課程設計指導——如何對課程設計中的項目進行選型

如何合理地創建對象實例以降低程序類之間關系的耦合度

如何正確應用對象/關系映射技術實現系統持久層中各個DAO組件

深入理解面向對象OOP技術中各種程序類之間的相互關系(下篇)

深入理解面向對象OOP技術中各種程序類之間的相互關系(上篇)

總結

以上是生活随笔為你收集整理的sql中如何统计各种零件的总数量_如何应用GOF设计模式中的构建者模式创建复合对象实例...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。