设计模式
23种设计模式
创建型:
如何创建一个对象,对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。
(5种)工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式
工厂模式
定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
应用实例:您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。而至于需要哪个牌子的汽车,就到哪个牌子的工厂。
抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
应用实例:超市里面有很多商品,购物车能放入商品(具体商品)是超市货架上的(抽象商品)
单例模式
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
应用实例:一夫一妻制(bushi)
建造者模式
使用多个简单的对象一步一步构建成一个复杂的对象。
应用实例:麦当当的单品组成套餐(兄弟们今天又下雨了,决定去镇上吃个套餐,到镇上啦!到超市啦!来桶泡面,来个鸭蛋,来瓶红牛,再来个鸡腿,兄弟们买好了,一共花了17块,现在去吃碗粉,老板来碗三鲜hun,兄弟们开吃!)
结构型:
如何灵活的将对象组装成较大的结构关注于对象的组成以及对象之间的依赖关系,描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。
(7种)适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式
适配器模式
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。
应用实例:苹果公司新出的M系列cpu是基于arm架构的,而intel和amd出的民用cpu是基于x86架构的,两者想运行基于对方架构构建的软件需要转译器。
装饰者模式
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
应用实例:长木棍拿在男孩手上就变成剑🗡,虽然还是木棍,但有🗡的功能了。
代理模式
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
应用实例:黄牛(
代理模式
隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。
应用实例:管家
桥接模式
把抽象化与实现化解耦,使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
应用实例:如果要绘制不同的颜色,如红色、绿色、蓝色的矩形、圆形、椭圆、正方形,我们需要根据实际需要对形状和颜色进行组合,那么颜色、形状就是抽象部分,组合后的就是实现部分。
组合模式
用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
应用实例:算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作数也可以是操作数、操作符和另一个操作数。
享元模式
用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
应用实例:数据库的数据池。
行为型:
负责对象间的高效通信和职责划分,关注于对象的行为问题,是对在不同的对象之间划分责任和算法的抽象化;不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。
(11种)策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式
策略模式
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。策略对象改变context对象的执行算法。
应用实例:面对这个问题呢,我们需要提出新角度,找到新解法。。。()
模板模式
一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
应用实例:一个月的工资就这么多qwq,这就是顶级骨架。
观察者模式
当对象间存在一对多关系时,则使用观察者模式。比如,当一个对象被修改时,则会自动通知它的依赖对象。 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
应用实例:拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价;
迭代器模式
迭代器模式是Java和.Net编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。提供一种方法顺序访问一个聚合对象中各个元素,而又无须暴露该对象的内部表示。
应用实例:JAVA中的iterator。
责任链模式
顾名思义,责任链模式为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
应用实例:红楼梦中的"击鼓传花"。
命令模式
命令模式是一种数据驱动的设计模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
应用实例:电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应电视机的不同操作。抽象命令角色由一个命令接口来扮演,有三个具体的命令类实现了抽象命令接口,这三个具体命令类分别代表三种操作:打开电视机、关闭电视机和切换频道。
备忘录模式
备忘录模式保存一个对象的某个状态,以便在适当的时候恢复对象。在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
应用实例:sl大法