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



推荐阅读
  • 本文详细介绍了Python的multiprocessing模块,该模块不仅支持本地并发操作,还支持远程操作。通过使用multiprocessing模块,开发者可以利用多核处理器的优势,提高程序的执行效率。 ... [详细]
  • C++中类的内外定义及内联函数详解
    本文详细介绍了C++中的类内定义与类外定义,以及内联函数的使用方法和注意事项。通过实例说明了不同定义方式的优缺点,并探讨了编译器对内联函数的处理机制。 ... [详细]
  • 本文旨在探讨Linux系统中两种重要的进程间通信(IPC)机制——System V和POSIX的标准及其特性,为开发者提供深入的理解。 ... [详细]
  • Python安全实践:Web安全与SQL注入防御
    本文旨在介绍Web安全的基础知识,特别是如何使用Python和相关工具来识别和防止SQL注入攻击。通过实际案例分析,帮助读者理解SQL注入的危害,并掌握有效的防御策略。 ... [详细]
  • Android开发经验分享:优化用户体验的关键因素
    随着Android市场的不断扩展,用户对于移动应用的期望也在不断提高。本文探讨了在Android开发中如何优化用户体验,以及为何用户体验的重要性超过了技术本身。 ... [详细]
  • 本文探讨了Flutter和Angular这两个流行框架的主要区别,包括它们的设计理念、适用场景及技术实现。 ... [详细]
  • 深入解析 Zend Guard 4 功能与配置
    本文旨在通过图文并茂的方式详细介绍 Zend Guard 4 的核心功能及其配置方法,特别适合英文阅读能力有限的技术人员。文中不仅提供了详细的步骤说明,还附带了实际操作中的注意事项,帮助读者更好地理解和应用这一工具。 ... [详细]
  • 重新审视Kubernetes的必要性
    近期,我注意到不少人误以为我是Kubernetes的推广者。实际上,我只是分享了一些适合用Kubernetes解决的案例。本文旨在探讨Kubernetes的适用场景,并提供一些替代方案。 ... [详细]
  • Golang与微服务架构:构建高效微服务
    本文探讨了Golang在微服务架构中的应用,包括Golang的基本概念、微服务开发的优势、常用开发工具以及具体实践案例。 ... [详细]
  • 本文详细介绍了Objective-C中的面向对象编程概念,重点探讨了类的定义、方法的实现、对象的创建与销毁等内容,旨在帮助开发者更好地理解和应用Objective-C的面向对象特性。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • SSE图像算法优化系列三:超高速导向滤波实现过程纪要(欢迎挑战)
    自从何凯明提出导向滤波后,因为其算法的简单性和有效性,该算法得到了广泛的应用,以至于新版的matlab都将其作为标准自带的函数之一了&#x ... [详细]
  • Linux 存储堆栈架构图
    本文提供了一张清晰的Linux存储堆栈架构图,并对比了多种iSCSI后端解决方案,如LIO和STGT。文中还提供了详细的资源链接,帮助读者深入了解这些技术。 ... [详细]
  • 远程访问用户 Kindle通过电子书实现控制
    介绍自2007年以来,亚马逊已售出数千万台Kindle,令人印象深刻。但这也意味着数以千万计的人可能会因为这些Kindle中的软件漏洞而被黑客入侵。他 ... [详细]
  • Android 开发技巧:使用 AsyncTask 实现后台任务与 UI 交互
    本文详细介绍了如何在 Android 应用中利用 AsyncTask 来执行后台任务,并及时将任务进展反馈给用户界面,提高用户体验。 ... [详细]
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社区 版权所有