热门标签 | 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



推荐阅读
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文探讨了如何像程序员一样思考,强调了将复杂问题分解为更小模块的重要性,并讨论了如何通过妥善管理和复用已有代码来提高编程效率。 ... [详细]
  • 本文总结了汇编语言中第五至第八章的关键知识点,涵盖间接寻址、指令格式、安全编程空间、逻辑运算指令及数据重复定义等内容。通过详细解析这些内容,帮助读者更好地理解和应用汇编语言的高级特性。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • TechStride 网站
    TechStride 成立于2014年初,致力于互联网前沿技术、产品创意及创业内容的聚合、搜索、学习与展示。我们旨在为互联网从业者提供更高效的新技术搜索、学习、分享和产品推广平台。 ... [详细]
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社区 版权所有