深入淺出設計模式學習筆記:一

來源:互聯網
上載者:User

標籤:

設計模式

1、定義:是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結

2、優點:代碼複用,易於維護,易於理解性,保證代碼的可靠性

3、分類:設計模式分為3種類型,共23種模式 

  建立型模式,共五種:Factory 方法模式、抽象原廠模式、單例模式、建造者模式、原型模式。

  結構型模式,共七種:適配器模式、裝飾器模式、代理模式、面板模式、橋接模式、組合模式、享元模式。

  行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解譯器模式。

4、軟體設計的6大原則:

  1)開閉原則(Open Closed Principle,OCP)

    開閉原則指的是對擴充開放,對修改關閉。

  2) 迪米特法則(最小知識原則)(Principle of Least Knowledge,PLK)

  3)裡氏代換原則(Liskov Substitution Principle,LSP)

  4)依賴倒轉原則(Dependency Inversion Principle,DIP)

  5)介面隔離原則(Interface Segregation Principle,ISP)

  6)單一職責原則

 

 

設計模式背後所秉承的精神所在是很多的設計原則:

1、把會變化的部分取出來並封裝起來,以便以後可以輕易的改動或擴充此部分,而不影響不需要變化的其他部分

2、針對介面編程,而不是針對實現編程

3、多用組合,少用繼承:組合就是將兩個類結合起來使用,使用組合建立系統具有很大的彈性

 

 

設計模式:

1、策略模式(Strategy Pattern):策略模式定義了演算法族,並將其分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化獨立於使用演算法的客戶

 組成:

 舉例說明:鴨子模擬器的設計

 

  1 /**  2  * 所有飛行行為必須實現的介面  3  */  4 interface FlyBehavior {      5     public void fly();  6 }  7 /**  8  * 所有呱呱叫行為必須實現的介面  9  */ 10 interface QuackBehavior {     11     public void quack(); 12 } 13 /** 14  * 飛行行為的具體實現1:可以飛行 15  */ 16 class FlyWithWings implements FlyBehavior { 17     @Override 18     public void fly() {         19         System.out.println("I am flying!");         20     }     21 } 22 /** 23  * 飛行行為的具體實現2:不會飛行 24  */ 25 class FlyNoWay implements FlyBehavior{ 26     @Override 27     public void fly() { 28         System.out.println("I can not fly!");     29     }     30 } 31 /** 32  * 呱呱叫行為的具體實現1:呱呱叫 33  */ 34 class Quack implements QuackBehavior{ 35  36     @Override 37     public void quack() { 38         System.out.println("Quack");         39     }     40 } 41 /** 42  * 呱呱叫行為的具體實現2:吱吱叫 43  */ 44 class Squeak implements QuackBehavior{ 45     @Override 46     public void quack() { 47         System.out.println("Squeak");         48     }     49 } 50 /** 51  * 抽象類別,是所有鴨子的超類,在該類中,定義了行為類型介面的引用變數 52  */ 53 abstract class Duck{ 54      55     FlyBehavior flyBehavior; 56     QuackBehavior quackBehavior; 57      58     public void setFlyBehavior(FlyBehavior flyBehavior) { 59         this.flyBehavior = flyBehavior; 60     } 61     public void setQuackBehavior(QuackBehavior quackBehavior) { 62         this.quackBehavior = quackBehavior; 63     } 64      65     public abstract void dispaly(); 66      67     //將鴨子的行為實現委託給行為類     68     public void fly(){ 69         flyBehavior.fly(); 70     } 71      72     public void quack(){ 73         quackBehavior.quack(); 74     } 75 } 76  77 /** 78  * 定義model duck子類繼承超類duck,並實現超類中的抽象方法 79  */ 80 class ModelDuck extends Duck{ 81      82     public ModelDuck(){ 83          84         flyBehavior = new FlyNoWay();  85         quackBehavior = new Quack(); 86     }      87     @Override 88     public void dispaly() { 89         System.out.println("I am a model duck!"); 90     }     91 } 92 /** 93  * 測試類別 94  */ 95 public class TestModel{ 96      97     public static void main(String[] args) { 98          99         Duck model = new ModelDuck();100         model.fly();101         model.quack();102         System.out.println("動態更改行為---");103         //調用鴨子的setter方法,在運行時改變鴨子的行為104         model.setFlyBehavior(new FlyWithWings());105         model.setQuackBehavior(new Squeak());106         model.fly();107         model.quack();108         109     }110     111 }
View Code

 運行結果:

深入淺出設計模式學習筆記:一

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.