0x000 设计模式简介和UML

初见设计模式是在学习安卓的过程中发现了,在我用到许多名中含有factory和buil相关的类的时候产生了一些疑问,后来才发现这些是设计模式的一种。所以带着疑惑和好奇开始了设计模式的研读之旅。本系列文章就是记录在我研究设计模式中的所思所想。主要的材料来源于《设计模式》、《大话设计模式》和w3c菜鸟在线教程网站,说是自写的文集,倒不如说是读书笔记更实在些许。

0x001 概述


设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)是软件工程领域有关软件设计的一本书,提出和总结了对于一些常见软件设计问题的标准解决方案,称为软件设计模式。该书作者为:埃里希·伽玛(Erich Gamma), Richard Helm, Ralph JohnsonJohn Vlissides,后以“四人帮”(Gang of Four,GoF)[1]
著称。---维基百科

统一建模语言UML,英语:Unified Modeling Language)是非专利的第三代建模规约语言。UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。---维基百科

0x002 UML介绍


UML是一门建模语言,甚至是一门专门的学科,这里不探究如何使用UML(或许未来会专门开一片文集来学习UML),只是为了看懂UML类图而介绍相关的东西。
为了介绍UML,我画了一张类图(模仿自大话设计模式):

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,关联,例如图中的Penguin和Climate,企鹅的生存和气候关系很大。
    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{
         //企鹅的生存和天气关系很大
         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 设计模式六大原则

这些暂且列在这,因为现在对于这些并不能真正理解所以我决定从实例出发,先理解再解释。
1.开闭原则(Open Close Principle)
2.里氏代换原则(Liskov Substitution Principle)
3.依赖倒转原则(Dependence Inversion Principle)
4.接口隔离原则(Interface Segregation Principle)
5.迪米特法则,又称最少知道原则(Demeter Principle)
6.合成复用原则(Composite Reuse Principle)

0x004 设计模式类型

工厂模式(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)
责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
备忘录模式(Memento Pattern)
观察者模式(Observer Pattern)
状态模式(State Pattern)
空对象模式(Null Object Pattern)
策略模式(Strategy Pattern)
模板模式(Template Pattern)
访问者模式(Visitor Pattern)
MVC 模式(MVC Pattern)
业务代表模式(Business Delegate Pattern)
组合实体模式(Composite Entity Pattern)
数据访问对象模式(Data Access Object Pattern)
前端控制器模式(Front Controller Pattern)
拦截过滤器模式(Intercepting Filter Pattern)
服务定位器模式(Service Locator Pattern)
传输对象模式(Transfer Object Pattern)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容

  • 一、前言 很多博客里面都会涉及到UML图,主要快速反映出程序的设计结构,类与类之间的依赖关系等,所以这个技能还是需...
    Mr丶sorrow阅读 1,989评论 0 6
  • title: 设计模式简介categories: 设计模式tags: 设计模式date: 2017-05-03 0...
    九命丿相柳阅读 580评论 0 0
  • 设计模式六大原则 设计模式六大原则(1):单一职责原则 定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类...
    viva158阅读 763评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • 面向对象的六大原则 单一职责原则 所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于...
    JxMY阅读 923评论 1 3