【笔记】设计模式

一.创建型模式(Creational):

简单工厂模式(simpleFactory)
定义:
提供一个创建对象实例的功能,而无须关心其具体实现被创建实例的类型可以是接口,抽象类也可以是具体的类.

1.抽象工厂(AbstractFactory)

定义:
提供一个创建-系列相关或相互依赖对象的接口,而无需指定他们具体的类.
使用场合:
1.如果希望一个系统独立于它的产品的创建组合和表示的时候换句话书,希望一个系统只是知道产品的接口,而不关心实现的时候.
2.如果一个系统要由多个产品系列中的一个来配置的时候换句话说就是可以。就是可以动态地切换产品簇的时候.
3.如果强调-系列相关产品的接口,以便联合使用他们的时候

2.建造者模式(Builder)

定义:
将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.
使用场合:
1.如果创建对象的算法,应该独立于该对象的组成部分以及它们的装配方式时
2.如果同一个构建过程有着不同的表示时

3.工厂方法模式

定义:
为创建对象定义一个接口,让子类决定实例化哪个类工厂方法让一个类的实例化延迟到了子类.
使用场景:
1.客户类不关心使用哪个具体类,只关心该接口所提供的功能
2.创建过程比较复杂,例如需要初始化其他关联的资源类,读取配置文件等.
3.接口有很多具体实现或者抽象类有很多具体子类时,
4.不希望给客户程序暴露过多的此类的内部结构,隐藏这些细节可以降低耦合度.
5.优化性能比如缓存大对象或者初始化比较耗时的对象.

4.原型模式

定义:
使用原形实例指定将要创建的对象类型通过复制这个实例创建新的对象.
应用场合:
1.如果一个系统想要独立于它想要使用的对象时,可以使用原型模式,让系统只面向接口编程,在系统需要新的对象的时候,可以通过克隆原型来得到
2.如果需要实例化的类是在运行时刻动态指定时;可以使用原型模式通过克隆原型来得到需要的实例.

5.单例模式(Singleton)

定义:
保证一个类仅有一个实例,并提供一个访问它的全局访问点
使用场合:
当需要控制一-个类的实例只能有一个而且客户只能从一一个全局访问点访问它时,可以使用单例模式这些功能恰好是单例模式要解决的问题

二.结构型模式(struct)

6.适配器模式Adapter)

定义:
将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.
使用场合:
1如果先要使用-一个已经存在的类但是它的接口不符合你的需求,这种情况可以使用适配器模式,来把已有的实现转换成你需要的接口.
2如果你想创建一一个可以复用的类,这个类可能和一些不兼容的类一 起工作,这中情况可以使用适配器模式到时候需要什么就适配什么。
3,如果你想使用一些已经窜在的子类,是不坑对每一个子类都进行适配,这中情况可以使用适配器模式,直接适配这些子类的父类就可以了。

7.桥接模式(Bridge)

定义:
将抽象部分与它的实现部分分离使他们可以独立变化.
使用场合:
1如果你不希望在抽象部分和实现部分采用固定的绑定关系。可以采用桥接模式.
2.如果出现抽象部分和实现部分都能够扩展的情况可以采用桥接模式,让抽象部分和实现部分独立地变化.
3.如果希望实现部分的修改不会对客户产生影响,可以采用桥接模式
4.如果采用继承的实现方案会导致产生很多子类,对于这种情况,可以考虑采用桥接模式

8.组合模式Composite)

定义:
将对象组合成属性结构以表示"部分整体"的层次结构,组合模式使用的用户对单个对象和组合对象的使用具有一致性.
使用场合:
1.如果你想表示对象的部分整体层次结构,可以使用把整体和部分的操作统一起来,使得层次结构实现更简单从外部来使用,这个层次结构也容易.
2.如果希望同意地使用组合结构中的所有对象,可以选用…,这正是组合模式提供的主要功能

9.装饰器模式

定义:
动态的给一个对象增加-些额外的职责就增加功能来说装饰模式生成子类更为灵活.使用场合:
1如果需要爱不影响其他对象的情况下,以动态透明的方式给对象添加职责,可以使用装饰模式
2.如果不适合使用子类来进行扩展的时候,可以考虑使用装饰模式.

10.外观模式Facade)

定义:
为子系统中的一组接口提供- -个- -致的界面Facade模式定义了一个高层的接口,这个接.口使得这一子系统更加同容易使用.
使用场景:
1.如果希望为一个复杂的子系统提供一个简单接口的时候,可以考虑使用外观模式.使用外观对象来实现大部分客户需要的功能从而简化客户的使用.
2.如果想要让客户程序和抽象类的实现部分松散耦合:可以考虑使用外观模式使用外观对象来将这个子系统与他的客户分离开来,从而提高子系统的独立性和可移植性.
3.如果构建多层节后的系统,可以考虑使用外观模式使用外观模式对象作为每层的入口,这样可以简化层间调用也可以松散出层次之间的依赖关系.

11.享元模式(Flyweight)

定义:
运用共享技术有效地支持大量细粒度的对象.
使用场合:
1.如果一个应用程序使用了大量的细粒度对象,可以使用享元模式来减少对象的数量2.如果犹豫使用大量的对象;造成很大的存储开销,可以使用享元模式来减少对象数量并节约内存.
3.如果对象的大多数状态都可以转变成外部状态,比如通过计算得到,或者从外部传入等,可以使用享元模式来实现内部状态和外部状态的分离.
4.如果不考虑对象的外部状态,可以用相对较少的共享对象取代很多组合对象,可以使用享元模式来共享对象然后组合对象来使用这些共享对象.

12.代理模式Proxy)

定义:
为其他对象提供一种代理以控制对这个对象的访问.
使用场合:
1.需要为一个对象在不同的地址空间提供局部代表的时候,可以使用远程代理.
2.需要按照需要创建开销很大的对象的时候,可以使用虛代理.
3.需要控制对原始对象的访问的时候,可以使用保护代理.
4.需要在访问你对象执行一些附加操作的时候,可以使用智能指引代理.

三.行为模式(behavioral)

13.职责链式模式

定义
使多个对象都有机会处理请求.从而避免请求的发送者和接收者之间耦合关系.将这些对象连成一条链并沿着这条链传递该请求直到有一个对象处理它为止.
使用场合:
1.如果有多个对象可以处理同一个请求但是具体由哪个对象来处理该请求是运行时刻动态确定的.
2.如果你想在不明确指定接收者的情祝下向多个对象中的其中一个提交请求的话,可以使用职责链模式
3.如果想要动态指定处理-一个请求的对象结合,可以使用职责链模式

14.命令模式(Command)

定义:
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作.

15.解释器模式Interpreter)

定义:
给定一个语言定义它的文法的一种表示并定义一-个解释器这个解释器使用该表示来解释语言中的句子.
使用场合:

16.迭代器模式Iterator)

定义:提供-种方法顺序访问一个聚合对象中的各个元素;而又不需要暴露该对象的内部表示.
使用场合:
1.如果你希望提供访问一个聚合对象的内容,但是又不想暴露他的内部表示的时候,可以使用迭代器模式来提供迭代器接口,从而让客户端只是通过迭代器的接口来访问聚合对象,而无须关心聚合对象的内部实现.
2.如果你希望有多种遍历方式可以访问聚合对象,可以使用
3.如果你希望为遍历不同的聚合对象提供一个统一的接口,可以使用…

17.中介模式(Mediator)

定义:
用一个中介对象类封装一系列对象的交互. 中介者使得各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互.
使用场合:
1.如果一组对象之间的通信方式比较复杂,导致相互依赖,结构混乱,可以采用中介模式,把这些对象相互的交互管理起来各个对象都只需要和中介者交互,从而是的各个对象松散耦合,结构也更清晰易懂.
2.如果一一个对象引用很多的对象并直接跟这些对象交互导致难以复用该对象,可以采用中介者模式把这个对象跟其他对象的交互封装到中介者对象里面,这个对象只需要和中介者对象交互就可了.

18.备忘录模式Memento)

在不破坏封装性的前提下捕获-个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态.
使用场合:
1.如果必须要保存一一个对象在某一个时刻的全部或者部分状态,方便以后需要的时候,可以把该对象恢复到先前的状态,可以使用备忘录模式
2.如果需要保存一一个对象的内部状态,但是如果用接口来让其他对象直接得到这些需要保存的状态将会暴露对象的实现希捷并破坏对象的封装性,这是可以使用备忘录

19.观察者模式Observer)

定义:
定义对象间的一种一对多的依赖关系:当一个对象的状态发生改变时所有依赖于它的对象都得到通知并被自动更新.
使用场合;
1.当一个抽象模型有两个方面其中一个方面的操作依赖于另一个方面的状态变化那么就可以选用观察者模式,将这两者封装成观察者和目标对象,当目标对象变化的时候依赖于它的观察者对象也会发生相应的变化.这样就把抽象模型的这两个方面分离了使得,它们可以独立地改变和复用.
2.如果在更改一个对象的时候需要同时连带改变其他对象,而且不知道究竟应该有多少对象需要被连带改变,这种情说可以选用观察者模式,被改的那一个对象很明显就相当于是目标对象,而需要连带修改的对歌其他对象就作为多个观察着对象了。
3.当一个对象必须通知其他的对象,但是你又希望这个对象和其他被它通知的对象是松散耦合的,也就是说这个对象其实不详知道具体被通知的对象这种情况可以选用观察者模式,这个对象就相当于是目标对象,而被它通知的对象就是观察者对象了.

20.状态模式(State)

允许一个对象在其内部状态改变是改变它的行为对象看起来似乎修改了他的类.使用场合:
1如果一个对象的行为取决于它的状态,而且它必须在运行时刻根据状态来改变它的行为,可以使用… 来包状态和行为分离开虽然分离了,但是状态和行为是有对应关系的,可以在运行期间,通过改变状态就能够调用到该状态对应的状态处理对象.上去从而改变对象的行为.
2.如果一个操作中含有庞大的多分枝语句,而且这些分支依赖于该对象的状态,可以使用.把各个分支的处理分散包装到单独的对象处理类中,这样这些分支对应的对象就可以不依赖于其他对象而独立变化了.

21.策略模式(Strategy)

定义:
定义一系列的算法把它们一个个封装起来并且使他们可以相互替换.本模式使得算法可独立于使用它的客户而变化.
使用场合;
1.出现有许多相关的类仅仅是行为有差别的情况下,可以使用策略模式来使用多个行为中的一个来配置-个类的方法,实现算法动态切换
2.出现同一算法有很多不同实现的情况下,可以使用策略模式来把这些"不同的实现"实现成为一个算法的类层次.
3.需要封装算法中,有与算法相关数据的情况下,可以使用策略模式来避免暴露这些跟算法相关的数据结构.
4.出现抽象一一个定义了很多行为的类并且是通过多个if-else 语句来选择这些行为的情况下,可以使用策略模式来替换这些条件语句

22.模版方法模式Template Method)

定义:
定义在一个操作中的算法框架,把一些步 骤推迟到子类去实现模版方法模式让子类不需要改变算法的结构而重新定义特定的算法步骤
功能:
1能够解决代码的冗余问题
2.把某些算法步骤延迟到子类
3.易于扩展
4.父类提供了算法框架控制了算法的执行流程而子类不能改变算法的流程,子类的方法的调用由父类的模版方法决定.
5.父类可以把那些重要的,不允许改变的方法屏蔽掉不让子类去复写他们

1.需要固定定义算法骨架,实现-一个算法的不变的部分 ,并把可变的行为留给子类来实现的情况.
2.各个子类中具有公共行为,应该抽取出来,集中在一-个公 共类中去实现,从而避免复杂的代码重复
3.需要控制子类扩展的情况模版方法模式会在特定的点来调用子类的方法,这样只允许在这些点进行扩展

23.访问者模式(Visitor)

定义: .
表示-个作用于某对象结构中的各个元素的操作它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作.
使用场合:
式1.如果想对一一个对象结构实施一 些依赖于 对象结构中具体类的操作可以使用访问者模
2.如果想对一一个对象结构中 的各个元素进行很多不同的而且不相关的操作,为了避免这些操作使类变得杂乱,可以使用访问者模式
3.如果对象结构很少变动,但是需要经常给对象结构中的元素定义新的操作,可以使用访问者模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值