24种设计模式复述

设计模式总结:

1.简单工厂模式
目的:输入一个符号,制造不同运算类。 主题在于封装了类
实现:实现统一接口的类交给一个工厂进行制造
案例: 两个字的加减乘除。符号是自定义。


简单工厂模式.png

2.策略模式
目的:输入一个类型,可以获得不同的结果。主题在于封装了各种规则(策略)
实现:实现统一接口(协议)的类交给一个上下文管理类。
案例: 商场打折策略,不打折,8折,满100返50


策略模式.png

3.装饰模式
目的:原有对象上,扩展其它特性。
实现:把原有对象抽取一级类(协议),二级类继承一级类,三级继承二级类就是 装饰类。原有叫做Component 装饰叫做Decorator
案例: 白纸上画鸟、山、水。


装饰模式.jpg

4.代理模式
目的:原有对象不动,让代理对象实现原有对象的功能。主题在于找人做事
实现: 把代理事件进行抽象,一个实现代理事件类,然后代理类也实现事件协议 类,并拥有原有对象和事件实现类,把原有对象扔给具体实现事件类,这样 就相当于,代理类完成原有类的动作。
案例: 帅哥找人送情书、送花、送钱


代理模式.png

5.工厂方法模式
目的:一个工厂造出不同功能的工厂,每个工厂做自己相应的事情。
实现:抽象工厂类和具体功能模板类,实现不同工厂类并实现不同模板类,不同工厂返回具体模板的类。
案例:加减乘除工厂造出加减乘除类


工厂方法模式.png

6.模板方法模式
目的: 写一个模板类,继承并重写子类
实现: 抽象子类特性,写出模板类。
案例: 按模板的字写出不同新式的字体。


模板方法模式.png

7.外观模式
目的: 不同类的功能,汇总一个类统一出口
实现: 一个类拥有所有功能类引用,提供方法将功能类变成统一出口
案例: 游戏启动,需要不同类的初始化。


外观模式.png

8.建造者模式
目的:指挥者来规则建造者,建造者提供不同功能规则组合成一个完整系统
实现:指挥者类持有建造者类引用,抽象建造者功能,实现者按建造者协议,实现不同的系统
案例:造一个胖子和瘦子的人体结构。


建造者模式.png

9.观察者模式
目的:一个类监听事件,一个类通知做事。达到外部变化内部做出相应动作
实现:订阅者负责收集和通知监听者,监听者得到信息后做出自己的变化所以监听者抽象一个更新操作接口
案例:早自习小明,小红,小蓝派小狗监听老师是否来了。


观察者模式.png

10.抽象工厂模式
目的:几个工厂的总合体,工厂按照不同协议规范造不同的产品。
实现:以实体为出发点。比如数据库中有用户实体和SQL实体等,然后这建立这两个实体,再建立抽象实体的操作类,然后抽象操作类工厂 ,建立不同实体操作类工厂,工厂持有操作类并返回。最终到达,工厂造出操作类,操作类操作实体。
案例:mysql\oracle数据库操作用户和部门的入库操作。


抽象工厂模式.png

11.状态模式
目的:一个实体,记录每种情况下的状态。
实现:根据实体的需求抽象状态,不同的状态实现。
案例:记录工作在不同的时间下状态。工作是实体,状态分早上,中午,下午,下班,睡觉的状态


状态模式.png

12.适配器模式
目的:在不改变情况下,对某个类的功能进行适配转换成特定功能。
实现:把要替换的功能进行抽象出来,然后让适配器实现该功能,并且适配器持有具体特定功能类。
案例:同一段文字,用不同语言去翻译


适配器模式.png

13.备忘录模式
目的:将属性备份起来,有时候属性想回到某个结点上。
实现:将要备份的属性抽取成类,主类上有这些属性必且可以更改这些属性,管理类负责保存备份数据,方便主类需要时调用管理类当时的 属性值。
案例:游戏保存人物血量、魔法量、技能。可重新回到某个结点上。


备忘录模式.png

14.组合模式
目的:层级分配,就像OC里面类的层级关系一样。子结点一直组合成一颗大树
实现:抽象组合接口协议,父子组件都实现该接口,父组件包含子组件
案例:公司组织架构图


组合模式.png

15.迭代器模式
目的:集合类和遍历类的关系处理。
实现:抽象集合类和抽象遍历类,这样可以实现不同集合(List,Set,Array) 和 遍历类循环方法
案例:任一个集合的遍历迭代实现方式。比如商店的商品集合迭代他的商标按A字母排序。


迭代器模式.png

16.单例模式
目的:全工程中只有这一个内存的类
实现:内存静态,dispatch_once一次初始化
案例:工程里面的配置文件管理类


单列模式.png

17.桥接模式
目的:主类利用模式可以扩展功能而且不改变原来功能
实现:抽象主体协议,实现类包含具体实现的功能类的引用,抽象功能类包含主体中需要的功能,让实现类部分实现即可
案例:手机是主体,你实现苹果手机、OPPO手机等,他有运行游戏功能、工作功能、运动功能,这些功能抽象成一个个插件,让子类去实 现。


桥接模式.png

18.命令模式
目的:请求者命令被请求者去做某个事情。
实现:请求者发布信息,被请求者接收信息,信息是一个实体类,信息处理又是具体的实体类。信息是多样的可以抽象出来。所以请求者和被请求者都持有信息类。 信息里面有excetue
案例:顾问点单,服务员接收订单,订单制作


命令模式.png

19.责任裢模式
目的:处理者处理自身业务,处理不了转发给其它处理者处理
实现:抽象处理者,持有自身引用处理者为上一级和处理请求方法,然后实现该抽象,在处理请求方法中超过自身能力范围就转发给上级处理。
案例:经理、总监、总经理处理员工请假流程。


责任链模式.png

20.中介者模式
目的:两个互相不认识的类,要打通一个功能,需要中间人帮忙介绍
实现:抽象两个对象行为,抽象中介者且这个中介者持有这两个互不认识对象引用。在中介者里把消息做互相交换,两个人只有中介者的持有
案例:A和B聊天信息交换


中介者模式.png

[图片上传中...(享元模式.png-3a82e8-1650951794755-0)]

21.享元模式
目的:频繁使用共有一块东西,这块东西效率保证高效,可以考虑享元
实现:工厂是维护共有的东西,并造出用户入口的实体类,当用户频繁使用实体类。所以抽象实体类,工厂持有实体类和共用数据,并造出实体类给用户使用
案例:不同用户访问网站,统计用户访问数量和人员信息。


享元模式.png

22.解释器模式
目的:一份需求,不同解释器,去解读信息。
实现:抽象解释器,持有要被解释的实体类,具体实现解释器,这样同一个实体类,遇到不同解释器,解释的东西不一样。
案例:一份需求,用JAVA来写代码和用C++来写代码。


解释器模式.png

[图片上传中...(访问者模式.png-77c7c6-1650951840732-0)]

23.访问者模式
目的:一群实体类,对不同的访问者呈现不同的反应。
实现:抽象元素类,这个元素类持有访问者,抽象访问者类,访问者碰到这个元素产生出不同的特性。这里两个互通功能交给管理者,管理者收集元素,并且分发给 不同的访问者
案例:一群不同兴趣的小朋友收到不同的礼物后,产生的表情。


访问者模式.png

24.原型模式
目的:克隆自身
实现:抽象原型类,中有复制方法,重写该方法可以初始化一个新类
案例:画多个几何图形


原型模式.png

单一职责原则(SRP),就一个类而言,只做一件事。
开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。
依赖倒转原则(DIP),A. 高层模块不应该依赖低层模块,两个都应该依赖抽象。B. 抽象不应该依赖细节,细节应该依赖抽象。
里氏代换原则(LSP),子类型必须能够替换掉它们的父类型。
迪米特法则(LoD),如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
合成/聚合复用原则(CARP),尽量使用合成/聚合,尽量不要使用类继承。

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

推荐阅读更多精彩内容