设计模式总结:
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),尽量使用合成/聚合,尽量不要使用类继承。
网友评论