热门标签 | 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 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 这是原文链接: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完胜人类冠军。 ... [详细]
  • 本文介绍了Java集合库的使用方法,包括如何方便地重复使用集合以及下溯造型的应用。通过使用集合库,可以方便地取用各种集合,并将其插入到自己的程序中。为了使集合能够重复使用,Java提供了一种通用类型,即Object类型。通过添加指向集合的对象句柄,可以实现对集合的重复使用。然而,由于集合只能容纳Object类型,当向集合中添加对象句柄时,会丢失其身份或标识信息。为了恢复其本来面貌,可以使用下溯造型。本文还介绍了Java 1.2集合库的特点和优势。 ... [详细]
  • 电销机器人作为一种人工智能技术载体,可以帮助企业提升电销效率并节省人工成本。然而,电销机器人市场缺乏统一的市场准入标准,产品品质良莠不齐。创业者在代理或购买电销机器人时应注意谨防用录音冒充真人语音通话以及宣传技术与实际效果不符的情况。选择电销机器人时需要考察公司资质和产品品质,尤其要关注语音识别率。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
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社区 版权所有