0x000 設(shè)計模式簡介和UML

初見設(shè)計模式是在學(xué)習(xí)安卓的過程中發(fā)現(xiàn)了,在我用到許多名中含有factory和buil相關(guān)的類的時候產(chǎn)生了一些疑問,后來才發(fā)現(xiàn)這些是設(shè)計模式的一種。所以帶著疑惑和好奇開始了設(shè)計模式的研讀之旅。本系列文章就是記錄在我研究設(shè)計模式中的所思所想。主要的材料來源于《設(shè)計模式》、《大話設(shè)計模式》和w3c菜鳥在線教程網(wǎng)站,說是自寫的文集,倒不如說是讀書筆記更實在些許。

0x001 概述


設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》(Design Patterns: Elements of Reusable Object-Oriented Software)是軟件工程領(lǐng)域有關(guān)軟件設(shè)計的一本書,提出和總結(jié)了對于一些常見軟件設(shè)計問題的標(biāo)準(zhǔn)解決方案,稱為軟件設(shè)計模式。該書作者為:埃里希·伽瑪(Erich Gamma), Richard Helm, Ralph JohnsonJohn Vlissides,后以“四人幫”(Gang of Four,GoF)[1]
著稱。---維基百科

統(tǒng)一建模語言UML,英語:Unified Modeling Language)是非專利的第三代建模規(guī)約語言。UML是一種開放的方法,用于說明、可視化、構(gòu)建和編寫一個正在開發(fā)的、面向?qū)ο蟮摹④浖芗到y(tǒng)的制品的開放方法。UML展現(xiàn)了一系列最佳工程實踐,這些最佳實踐在對大規(guī)模,復(fù)雜系統(tǒng)進(jìn)行建模方面,特別是在軟件架構(gòu)層次已經(jīng)被驗證有效。---維基百科

0x002 UML介紹


UML是一門建模語言,甚至是一門專門的學(xué)科,這里不探究如何使用UML(或許未來會專門開一片文集來學(xué)習(xí)UML),只是為了看懂UML類圖而介紹相關(guān)的東西。
為了介紹UML,我畫了一張類圖(模仿自大話設(shè)計模式):

Main.png
  • 矩形框:表示Class,比如圖中的Animal,就是表示一個類,一共分為三層:

    • 類名稱:如果是抽象類,就用斜體表示,如果是接口就在前面寫上<<interface>>,接口的另一種表示方法是棒棒糖表示法,如圖中的SpeakEnglish
    • 類屬性
    • 類方法
      注意:前面的+ 代表public,-代表private,#代表protected。
  • 空心三角實線箭頭:表示Generalization,繼承,例如圖中的Animal和Bird。

    class Animal{
       public boolean life;
       public void metabolism(O2 o2, Water water){}
       public void multiplication(){}
    }
    class Bird extends Animal{
       public boolean feather;
       public void layEggs(){ }
    }
    class O2 {
    }
    class Water {
    }
    
  • 實線箭頭:表示directed Association,關(guān)聯(lián),例如圖中的Penguin和Climate,企鵝的生存和氣候關(guān)系很大。
    class Penguin extends Bird{
    private Climate climate;
    }
    class Climate {}

  • 空心方形實線箭頭:表示Aggregation,聚合,例如圖中的Goose和Geese,多只大雁聚合成一個雁群。
    class Geese{
    private List<Goose> gooseList;
    public void vFly(){ }
    public void straightFly(){ }
    }
    class Goose {
    public void layEggs(){ }
    public void fly(){ }
    }

  • 實心方形實線箭頭:表示Composition,組合,例如圖中的Bird和Wing,Wing是Bird的一部分。
    class Bird extends Animal{
    private Wing wing;
    public Bird(Wing wing){
    this.wing=wing;
    }
    public boolean feather;
    public void layEggs(){ }
    }
    class Wing {}

  • 虛線箭頭:表示Dependency,依賴,比如圖中的Animal和02和Water,動物生存依賴水和氧氣。
    class Animal{
    public boolean life;
    public void metabolism(O2 o2, Water water){}
    public void multiplication(){}
    }
    class O2 { }
    class Water {}

  • 整理之后

     /**
       * 動物類
       */
     class Animal{
         public boolean life;
         //動物的新陳代謝需要水和氧氣
         public void metabolism(O2 o2, Water water){}
         public void multiplication(){}
     }
    
     /**
      * 鳥類:繼承動物類
      */
     class Bird extends Animal{
       //翅膀是鳥類組成的一部分(這里只列出翅膀而已)
       private Wing wing;
       public Bird(Wing wing){
           this.wing=wing;
       }
       public boolean feather;
       public void layEggs(){ }
     }
    
     /**
      * 翅膀類
      */
     class Wing {}
     //企鵝繼承鳥類
    class Penguin extends Bird{
         //企鵝的生存和天氣關(guān)系很大
         private  Climate climate;
         public Penguin(Wing wing) {
           super(wing);
         }
     }
    
     /**
      * 氧氣類
      */
      class O2 {}
    
     /**
      * 水類
      */
      class Water { }
     /**
      * 氣候類
      */
     class Climate { }
      /**
      * 雁群類
      */
     class Geese{
       private List<Goose> gooseList;
       public void vFly(){}
       public void straightFly(){ }
     }
       /**
      * 大雁類
      */
     class Goose {
         public void layEggs(){}
         public void fly(){ }
     }
    

0x003 設(shè)計模式六大原則

這些暫且列在這,因為現(xiàn)在對于這些并不能真正理解所以我決定從實例出發(fā),先理解再解釋。
1.開閉原則(Open Close Principle)
2.里氏代換原則(Liskov Substitution Principle)
3.依賴倒轉(zhuǎn)原則(Dependence Inversion Principle)
4.接口隔離原則(Interface Segregation Principle)
5.迪米特法則,又稱最少知道原則(Demeter Principle)
6.合成復(fù)用原則(Composite Reuse Principle)

0x004 設(shè)計模式類型

工廠模式(Factory Pattern)
抽象工廠模式(Abstract Factory Pattern)
單例模式(Singleton Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)
適配器模式(Adapter Pattern)
橋接模式(Bridge Pattern)
過濾器模式(Filter、Criteria Pattern)
組合模式(Composite Pattern)
裝飾器模式(Decorator Pattern)
外觀模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)
責(zé)任鏈模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解釋器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
備忘錄模式(Memento Pattern)
觀察者模式(Observer Pattern)
狀態(tài)模式(State Pattern)
空對象模式(Null Object Pattern)
策略模式(Strategy Pattern)
模板模式(Template Pattern)
訪問者模式(Visitor Pattern)
MVC 模式(MVC Pattern)
業(yè)務(wù)代表模式(Business Delegate Pattern)
組合實體模式(Composite Entity Pattern)
數(shù)據(jù)訪問對象模式(Data Access Object Pattern)
前端控制器模式(Front Controller Pattern)
攔截過濾器模式(Intercepting Filter Pattern)
服務(wù)定位器模式(Service Locator Pattern)
傳輸對象模式(Transfer Object Pattern)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 一、前言 很多博客里面都會涉及到UML圖,主要快速反映出程序的設(shè)計結(jié)構(gòu),類與類之間的依賴關(guān)系等,所以這個技能還是需...
    Mr丶sorrow閱讀 2,030評論 0 6
  • title: 設(shè)計模式簡介categories: 設(shè)計模式tags: 設(shè)計模式date: 2017-05-03 0...
    九命丿相柳閱讀 605評論 0 0
  • 設(shè)計模式六大原則 設(shè)計模式六大原則(1):單一職責(zé)原則 定義:不要存在多于一個導(dǎo)致類變更的原因。通俗的說,即一個類...
    viva158閱讀 784評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139
  • 面向?qū)ο蟮牧笤瓌t 單一職責(zé)原則 所謂職責(zé)是指類變化的原因。如果一個類有多于一個的動機(jī)被改變,那么這個類就具有多于...
    JxMY閱讀 975評論 1 3