java物件導向與設計模式(一)

來源:互聯網
上載者:User

標籤:優勢   rod   factory   執行個體   interface   factor   耦合   專註   工廠   

設計原則:SOLID 可以說,五個設計原則各司其職。
單一職責原則(S):用於類的設計
開閉原則(O):總的指導思想
裡氏替換原則(L):用於指導類繼承的設計
介面隔離原則(I):用於指導介面的設計
依賴翻轉原則(D):用於指導如何抽象

類之間的關係:
繼承=實現>組合>彙總>關聯>依賴

UML表現:
繼承:帶三角箭頭的實線,箭頭指向父類實現:帶三角箭頭的虛線,箭頭指向介面組合:帶實心菱形的實線,菱形指向整體彙總:帶空心菱形的實線,菱形指向整體關聯:帶普通箭頭的實線,指向被擁有者依賴:帶普通箭頭的虛線,指向被使用者簡單說明一下,《1》繼承和實現是java內建的,屬於強耦合關係;《2》組合和彙總是特殊的關聯關係,關聯關係體現在代碼上就是作為成員變數,彙總關係要強於關聯關係,代碼上往往會通過set()方法完成對成員變數的賦值,組合關係則更加強一些,往往在建構函式就完成了初始化,也就是說,在一般情況下,生命週期上組合>彙總>關聯;《3》依賴和關聯恰恰相反,代碼上一般不出現在成員變數。常見於局部變數、方法的參數或者對靜態方法的調用。 設計模式:(經典23式)設計模式的核心在於複用,如果單用,則成為累贅。

第零式 簡單原廠模式。預備知識:介面
介面能夠隔離封裝,為系統的可插拔性提供保證。在介面也抽象類別的選擇上,應該優先選擇介面,只有需要為子類提供公用功能的時候,才需要考慮抽象類別。
下面舉個例子,說明介面的具體實現。
public interface product {        public void createProduct();}public class conCreteProduct implements product {    @Override    public void createProduct() {        // TODO Auto-generated method stub        System.out.println("生產產品");    }}public class user {    public static void main(String[] args) {        // TODO Auto-generated method stub        product prod1 = new conCreteProduct();        prod1.createProduct();    }}
上面這個例子雖然使用了介面隔離(並沒有完全隔離),但是還是存在一些問題。那就是user需要知道具體實現。這樣user和具體產品就存在著耦合關係。而增加一個工廠類則可以達到解除耦合的目的。
public interface product {        public void createProduct();}public class conCreteProduct implements product {    @Override    public void createProduct() {        // TODO Auto-generated method stub        System.out.println("生產產品");    }}public class factory {        public void createProduct() {        product prod1 = new conCreteProduct();        prod1.createProduct();    }}public class user {    public static void main(String[] args) {        // TODO Auto-generated method stub        factory fact1 = new factory();        fact1.createProduct();    }}
增加了factory類以後,user就可以不需要關注具體實現了。把生產商品的事情交給了工廠來處理。而自己則專註於消費產品就可以了。這對於一個產品來說,的確是得不償失的。但如果產品的種類多的話,優勢還是很明顯的(user不需要考慮繁瑣的建立過程)。 簡單原廠模式的定義:提供一個建立對象執行個體的功能,而無須關心其具體實現。被建立對象的類型,可以是介面,抽象類別,也可以是具體的類。 簡單工廠的本質是選擇實現。優點在於協助封裝和解耦,缺點則在於增加了用戶端複雜度以及不利於擴充子工廠。 簡單工廠常採用靜態方法來實現,所以有時被稱作靜態工廠。為了選擇實現,還可以把選擇的部分配置到設定檔當中去。
public interface product {        public void makeProduct();}public class concreteProduct implements product {    @Override    public void makeProduct() {        // TODO Auto-generated method stub        System.out.println("中國製造");    }}public class factory {        public static product makeProduct() {        Properties pro = new Properties();        InputStream in = null;        try {            in = factory.class.getResourceAsStream("factory.properties");            pro.load(in);        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } finally {            try {                in.close();            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }                product prod = null;        try {            prod = (product) Class.forName(pro.getProperty("product1")).newInstance();        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }                return prod;            }    }public class user {    public static void main(String[] args) {        // TODO Auto-generated method stub        product prod = factory.makeProduct();        prod.makeProduct();    }}設定檔factory.propertiesproduct1=No0.concreteProduct

java物件導向與設計模式(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.