热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

设计模式感悟随笔

1.身为初级程序员大部分都是Ctrlc和Ctrlv是一个很不好的编码习惯,当下一次运用Ctrlc和Ctrlv的时候可以自己考虑一下把该代码进行一次重构封装。2.开放-

1.身为初级程序员大部分都是Ctrl+c和Ctrl+v 是一个很不好的编码习惯,当下一次运用Ctrl+c和Ctrl+v 的时候可以自己考虑一下把该代码进行一次重构封装。

2.开放-封闭原则,以后在定义好一个类的时候假设不会变化,而在第一次因为种种原因进行修改时,就要重构代码,不能在同一个地方倒下两次。

3.简单工厂模式在于传入一个参,用该参来判定到底生成一个什么对象,并返回该对象。而策略模式在于直接通过构造方法传入一个对象的子类,来通过子类的类型来确认调用什么方法,进而可以用到反射生成该对象,字符串可以为变量。

6.工厂方法模式,跟简单工厂模式不同的在于,把工厂类进行接口化,进而实现了,对应的要工厂返回的抽象类对应的几个子类工厂类,而每次新增新功能的时候只需要多继承出一个子类,在实现一个工厂类。就可以做到。

4.装饰模式,定义一个接口,继承接口的被装饰对象,继承接口的装饰抽象类,继承装饰抽象类的的几个具体装饰类,通过构造方法把装饰对象存入装饰类中,在通过调用接口的装饰抽象方法根据子类重写不同的方法来确认调用的装饰方法。

5.代理模式,定义一个接口,实现一个被代理的类,实现一个代理类,该代理类拥有被代理类的引用,重写方法,实际实现的方法都为该引用调用的方法。

7.里氏代还原则子类型必须可以替换父类型。

8.模板方法,当子类中不变的和可变的混合在一起时候,不变的就会在子类中重复出现,我们就可以把重复的提取出来,提取到单一的一个类中,可以帮子类摆脱重复的行为。

9.外观模式,通过一个接口持有多个类的引用,把复杂凌乱的关系,简化。

10.建造者模式,一个抽象接口,该接口定义了被建造的所有组件,具体的几个实现类,具体的实现了不同的建造物,然后会有个返回方法,返回一个对象,该对象是建造好的对象。还有一个指挥者接口,该接口持有建造者接口,通过构造方法实例的时候传入的构造者类型来确定构造具体对象。持有者接口还有一个方法,该方法就像一个工作流一样,把一个个不同的组件组装成一个成品对象。

11.观察者模式,当一个对象改变时,要通知所有其他对象时,使用观察者模式。观察者模式主要功能在于解除耦合,让耦合双方都依赖接口,而不是依赖具体。

12.类与类之间的耦合双方都依赖接口,而不是依赖具体,能进行接口化就进行接口化,能进抽象的就进行抽象。

13.抽象工厂方法,一个抽象工厂接口,实现不同的具体工厂类,根据工厂类的不同,返回不同类型的对象。简单工厂方法配合反射机制可以有效的消灭if判断。

14.状态模式,定义一个状态接口,几个具体实现的状态,把不同的状态下的具体功能放到不同的实现类中,在根据当前对象传入的判断条件,判断是否进行状态切换,一个拥有状态引用的的主体类,根据不同的状态调用状态的具体实现。

15.适配器模式,可以通过一个类持有一个要被适配的类的引用,在通过重写方法,把该引用的方法写在重写的方法中。

16.备忘录模式,一个备忘录类用来保存需要记录的数据。一个管理者类用来储存已经记录的数据(备忘录对象的引用)。主体类,拥有保存和回复功能方法,保存返回一个备忘录对象,把该对象交个管理者,回复从管理者中拿到备忘录对象通过回复方法进行数据恢复。

17.组合模式,定义一个组合接口有增加删除显示功能,还可以根据具体业务抽象方法。两种实现类,细分可以分出三种,一种是枝,一种是叶,还有一种也是枝但是它是第一个枝所以是根。在枝的实现类中有一个集合泛型为该接口类型,就可以任意添加删除。

18.迭代器模式,声明一个抽象类用来存放集合,一个接口迭代器接口,实现抽象类一个集合变量,用来存放遍历数据,拥有两个方法一个返回集合数量,一个为根据索引获取数据,还可以拥有一个方法创造一个迭代器。迭代器的接口根据迭代要求实现该类。

19.单例模式,通过private自己的构造方法,可以自己履行自己单例的职责,在声明一个自己的静态变量,用于判断是否可以进行实例化。在给外界一个静态方法用来获取该对象。分懒汉模式和饿汉模式,恶汉模式占系统资源,但懒汉模式可能引发多线程的时候造成多次实例化,需要加线程锁来保证单例模式的安全。

20.继承是一种强耦合,而聚合和合成松耦合,不是什么时候都适合用继承。

21.桥接模式,实现一个系统可以有多角度分类,每一分类都都有可能变化,而只用继承会造成大量的类增加,不能满足开放封闭原则的时候就该考虑桥接模式了。将抽象部分抽出一个抽象类,将能实现的部分抽出一个接口,抽象类的不同实现,持有一个接口类型的引用,根据抽象类的实现和接口的实现不同实现了桥接模式的灵活组合。

22.命令模式,有一个具体实施的对象,一个执行操作的接口,实现该接口的类,该类引用具体实施的对象,通过执行方法,执行具体操作,一个接受命令的类,该类拥有一个执行接口类型的变量,通过他来下达命令。

23.职责链模式,定义一个处理请求接口,该接口拥有执行方法和指定下一处理者的方法,分别实现该接口,只需要使用的时候灵活定义下一处理者就行,但是必须把每一个实现类中的处理请求的判断写好,以免逻辑混乱。

24.中介者模式,定义一个中介者抽象类,一个需要的接口,分别实现。中介者实现类必须拥有所有需要中介对象的引用为变量。而实现接口的类必须拥有中介者类型的引用,已便调用中介者进行通知,而中介者就必须在内部进行复杂判断,中介中引用越多,越复杂。

25.亨元模式,一个父类或接口,两种不同的实现,一种是需要共享的实现,一种为不需要共享的实现。一个亨元工厂方法,一个集合成员变量用来存贮需要共享的对象,一个获取方法通过该方法来获取共享对象,没有则创建实例在添加到集合中,然后返回。亨元模式还分内部状态和外部状态,内部状态是不会随着外部环境改变而改变,而外部状态会随着外部环境改变而改变,当确定大量重复的类中只有除了几个参数不同而大量参数相同时可以考虑使用元亨模式,把仅有的几个外部状态的参数,通过传参传入。

26.解释器模式。一个解释表达式的抽象类,分别实现不同表达式代表的实现类。

27.访问者模式。适用于数据结构稳定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开。定义一个对象的抽象类(该对象的实现必须稳定个数),分别实现他的子类。定义一个访问者接口,每多一个实现对象该接口就会多一个访问方法。拥有多少个不同的访问就实现多少个类。然后通过双分派技术,通过子类的类型来确定调用那个类的方法,在通过把自身当做参数传入该方法已确定该方法调用什么类型。还可以添加一个高层次的类用来存放集合,添加,删除,枚举。

转:https://www.cnblogs.com/bowei/p/8567520.html



推荐阅读
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 信息安全等级保护是指对国家秘密信息、法人和其他组织及公民的专有信息以及公开信息和存储、传输、处理这些信息的信息系统分等级实行安全保护,对信息系统中使用的信息安全产品实 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
author-avatar
Cyndi丶先生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有