》设计原则《

》Single Responsibility Principle(单一职责原则)类只有一个修改的原因。

●类的复杂性降低,实现什么职责都有明确的定义。

●可读性高

●可维护性高

●变更引起的风险降低。

PS:基本不可能实现

》里氏替换原则:只要父类可以出现的地方,子类就可以出现。

》Dependence  Inversion Principle(依赖倒置原则)

●高层次模块不应该依赖低层模块,两者都应该依赖抽象。

●抽象不应该依赖细节,细节应该依赖抽象

》接口隔离原则:类之间的依赖关系应该建立在最小的接口上。

》迪米特法则:一个对象应该对其他对象有最少的理解。

》开闭原则:对扩展开放,对修改关闭。

●逻辑变化

●子模块变化

●可见视图变化

设计模式

》单例模式(Singleton Pattern):要求一个类只能生成一个对象,所有对象对他的依赖都是相同的。

类图:

优点:

●较少了内存开支,性能开销。避免对资源的多重占用。

●优化和共享资源访问。

缺点:

●扩展困难。对测试不利。

使用场景:

● 生成唯一序列号的环境。

●需要一个共享的访问点或共享数据。如web上的计数器。

●创建对象需要耗费的资源过多。如访问IO资源。

注意事项:

●线程同步的问题。

最佳实现:

● 在Spring中,每个Bean默认都是单例的。

》工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个对象。

类图:

优点:

●良好的封装。代码结构清晰。

●扩展非常优秀。

●屏蔽产品类。

扩展:

● 缩小为简单工厂。

●升级为多个工厂类。

●替代单例模式

●延迟初始化。

》抽象工厂模式:为创建一组相关或依赖的对象提供一个接口,却无需指定它们的具体类。

类图:

优点:

●封装性,工厂类创建需要的对象。

●产品族的约束为非公开的状态。

缺点:

● 产品族扩展非常困难。

》模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类,使得子类可以在不改变一个算法的结构即可重新定义该算法的某些特定步骤。

类图:

●注:在软件开发的过程中,如果相同的代码拷贝过两次,就要对设计产生怀疑。

●为了防止恶意的操作,一般模板方法都加上final关键字,不如许复写。

优点:

●封装不变的部分,扩展可变的部分。

●提取公共代码,便于维护。

● 行为由父类控制,子类实现。

缺点:

●子类对父类产生了影响,会带来代码的阅读难度。

使用场景:

●可以把核心算法设计为模板方法。

●重构时,把相同的代码抽取到父类。

扩展:

●增加钩子方法,也就是说外界条件改变,影响到模板方法的执行。

》建造者模式:将一个复杂对象的构建与他的表示分离。是得同样的构建过程可以创建不同的表示。

● ArrayList和HashMap如果定义成类的成员变量,那你的方法中的调用一定要做一个clear的动作。以防数据混乱。

类图:

●product产品类:通常是实现了模板方法模式。

●Builder抽象构建者:规范产品的组件。一般由子类实现。

●ConcreteBuilder:实现抽象类所定义的方法,并返回一个组建好的对象。

●Director导演:负责安排已有的顺序。起到封装的作用。

优点:

●可以使客户端不必知道产品内部组成的细节。

●建造者独立,容易扩展。

● 便于控制细节。

使用场景:

●相同的方法,不同的执行顺序,产生不同的结果。

●多个部件,都可以装配到一个对象中,但是产生的运行结果有不同。

●产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能。

》代理模式:为其他对象提供一个代理以控制这个对象的访问。

类图:

●subject主题角色:普通的业务类型定义。

● Realsubject:业务逻辑的具体执行者。

●proxy:调用真实的类。

优点:

● 职责清晰,真实的角色实现实际的业务逻辑。不必关心其他的事情。

● 高扩展性:不管具体的主题如何变化,代理类都可以不用变。

注:String AOP是一个典型的动态代理的应用。

》》原型模式:用原型实例指定创建对象的种类。并且通过拷贝这些原型创建新的对象。

类图:

优点:

●  性能优良,原型模式是二进制流的拷贝,要比直接new一个性能好的多。

● 逃避构造函数的约束。

注:执行拷贝的时候不会运行构造函数。

● 浅拷贝:clone只拷贝本对象,其对象内部的数组,引用对象不拷贝。

注:在使用原型模式的时候,引用的成员变量必须是成员变量与是一个可变的引用变量才不会被拷贝。

●深拷贝:把引用变量单独拷贝。

注:深拷贝与浅拷贝不要混合使用。

对象的clone与对象的final关键字是冲突的。要是用clone方法,就不要使用final。

》》中介者模式:用一个中介对象封装一系列对象的交互,中介者使各对象不需要显示地相互作用。从而松耦合。也可以独立的改变他们之间的交互。

类图:

●优点:减少类的依赖。降低了类之间的耦合度。

●缺点:中介者会膨胀的很大,逻辑复杂。

●MVC:C就是一个中介者。

未完待续。。。。。。

转载于:https://www.cnblogs.com/skys-li/p/5363771.html

设计模式之禅读书笔记相关推荐

  1. 设计模式之禅读书笔记—行为类模式

    设计模式之禅读书笔记-行为类模式 PDF下载地址 责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式 责任链模式 定义:使多 ...

  2. 设计模式之禅读书笔记1

    原型模式 实现Cloneable接口并重写clone()方法,就完成了原型模式. 通用源码: public class ProtoTypeClass implements Cloneable{@Ove ...

  3. 《设计模式之禅》笔记序言(附源码链接)

    <设计模式之禅>笔记序言(附源码链接) GitHub链接 2021年9月初,我下定决心要从书本出发,建立自己的技术栈基础体系.在此过程中,从阅读的部分书籍的源代码导读中,我发现其中有迹可循 ...

  4. 设计模式之美读书笔记

    目录 设计模式之美 读书笔记5- 哪些代码看似面向对象,实际是面向过程编程? 读书笔记4- 封装.抽象.继承.多态分别解决了什么编程问题? 读书笔记3- 我们在讨论面向对象的时候,主要说的是什么? 读 ...

  5. 《设计模式之禅》笔记

    本片基于<设计模式之禅>所总结的笔记.其中总结了面试一般的常见的问题,虽然只是单调的文字,但是精简了很多概念,本文比较适合有一定设计模式基础的人,当做一个复习的笔记随时可查看. 单例模式 ...

  6. 设计模式沉思录 - 读书笔记(XMind)

    注:后面会不定期,以XMind的方式发布一些读书笔记. 目标:书还要是越读越薄才行!

  7. 设计模式之禅学习笔记

    设计模式 一,六大设计原则[SOLID] 1,单一职责[SRP]:应该有且仅有一个原因引起类的变更. "职责"和"变化原因"都是不可度量的,因项目和实际环境而异 ...

  8. 《设计模式解析》读书笔记

    Facade模式 GoF模式中的定义: 为子系统中的一组接口提供一个统一的接口.Facade模式定义了一个更高层的接口,使子系统更容易使用. 通过Facade,我们将以一种更简单的方式来使用原有系统. ...

  9. 《深入浅出设计模式-中文版》读书笔记-工厂模式(五)

    今天给大家带来的是:工厂模式. 我们在代码中创建一个对象,我们会很自然的想到new.其实,除了new意外,我们还有很多的方式可以创建对象.不说复杂的模式,就说简单的语法,其实.NET框架中还有下面的方 ...

最新文章

  1. Unity 简单示例代码和向导/Unity Aplication Block
  2. 使用HTML5的自定义数据属性的jQuery选择器
  3. 不要成为自己讨厌的那种程序员
  4. 跨站点脚本(XSS)
  5. .NET CoreCLR开发人员指南(上)
  6. 现在做Android开发有前途吗?复习指南
  7. webpack打包缓存_webpack独立打包与缓存处理
  8. Postgres 9.2.4的升级方案与步骤
  9. 安装redis k8s_K8S 生态周报| Docker v19.03.6-rc2 发布
  10. angular4自定义组件非input元素实现ngModel双向数据绑定(转载)
  11. OpenCV 文字绘制——cv::putText详解
  12. 基于UDS协议的Bootloader
  13. 实验一 顺序表基本操作的实现
  14. 判断浏览器是否支持html5
  15. 京瓷打印机p5026cdn_京瓷p5026cdn驱动下载-京瓷p5026cdn打印机驱动v2.0.1421 官方版 - 极光下载站...
  16. Oracle RAC 11g实战指南
  17. MOEA基于分解的多目标进化算法
  18. 电脑USB口输出的是什么电平
  19. 云之讯张雯:云计算时代融合通讯开发及算法优化
  20. 程序化广告(3):交易模式

热门文章

  1. Java 多线程 —— ThreadLocal
  2. 排序算法之--归并排序(好玩的一个算法o。o)快速入门
  3. 两个单链表相交的一系列问题----0_0
  4. mysql 数据库设置mysql注入_MYSQL数据库浅析MySQL的注入安全问题
  5. Java调用虚拟键盘输入法_Android 点击屏幕空白处收起输入法软键盘(手动打开)...
  6. java map转string_【库学科技】32道常见的Java基础面试题
  7. @postconstruct注解方法没有执行_被标记为事务的方法互相调用的坑(下)
  8. 一直显示数据格式错误_Excel数据分析,新手最容易犯的10个建表错误
  9. typecho模板ajax,typecho ajax登陆
  10. python怎么启动mne_mne-python学习之一 入门介绍