简单工厂模式

就是从很多类中根据条件,通过方法,产生相应类的实例。

策略模式

它定义了算法家族,分别封装起来,让它们之间可以互相转换,此模式让算法的变换不会影响到使用算法的客户。

单一职责原则

就一个类而言,应该仅有一个引起它变化的原因。

一个类承担的职责过多,就会耦合职责,遇到变化就会导致设计可能遭受破坏。

软件设计正真要做的内容,就是发现职责并且把那些职责相互分离开来。

如何判断要分离出类来?

多余一个动机去改变一个类,那么这个类就具有多余一个的职责,就应该考虑类的分离。

开放封闭原则

一开始就设计一个功能完全的类,然后对新需求添加。(这是最完美的状态)

但是完全的“封闭”是不可能的,所以猜测最有可能变化的种类,然后隔离哪些变化。

里时代换原则

子类型必须能够替换父类型,并且程序的行为没有变化。

依赖倒置原则

高层模块不依赖底层模块,高层模块和底层模块都依赖抽象。

抽象应该依赖细节,细节应该依赖抽象。

装饰者模式

动态的给一个对象添加一些额外的职责。

装饰者对象与被装饰对象要有共同的抽象类。或者装饰者对象的父类就是被装饰对象,这样才能类似链式的调用返回的对象。

代理者模式

为其他对象提供一种代理,以控制对这个对象的访问。

代理对象的行为和被代理对象基本一致,被代理对象可能“透明”。

代理模式就是添加间接性,通过“间接性”添加更多的行为。

工厂方法模式

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

“工厂方法模式”Vs“简单工厂模式”

简单工厂模式对修改和添加都开放。

工厂方法模式对修改关闭对添加开放。

原型模式

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

原型模型其实就是从一个对象在创建另一个可定制的对象,而且不需要知道任何创建细节。

模板方法模式

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

通过把不变行为的代码搬移到超类,去除子类中的重复代码来体现它的优势。

迪米特法则 最少知识原则

如果两个类不必彼此直接通信,那么这两个类就不应当直接的相互作用。如果其中一个类需要调用另一个类的某个方法的话,可以直接通过第三者转发这个调用。

根本思想是强调了类之间的松耦合。

外观模式

为子系统中的一组借口提供一致的界面,此模式定义了一个高层借口,这个接口使得这一子系统更加容易使用。

体现了迪米特法则和依赖倒置

和代理模式很像但是代理模式代理一个实例,外观模式提供一组借口。

使用 层与层 新系统与老系统

建造者模式

将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。

创建对象的算法太复杂,需要独立出去。

观察者模式

定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主体对象。这个主题对象在转态发生改变的时候,就会通知所有观察者对象,使他们能够自我更新。

抽象工厂模式

提供一个创建一系列相关或相互依赖对象的接口,而无需具体制定它们具体的类。

跟工厂方法模式相比就是多了“一系列”,不单是创建一个。

反射

在你不知道一个对象内部结构的情况下(你甚至连这个对象的一个属性,或api都不知道),怎么跟他通信呢?这个时候就要通过一种机制,得到它的内部结构。这种机制就叫做反射。说白了,窥探对象内部结构的方法就叫做反射。

配置文件也很重要

状态模式

当一个对象内在状态改变时,允许改变内在的行为,就像是改变了对象的类。

主要是简化if判断语句。

适配器模式

将行为相同,接口不同的类,通过适配器转换为相同接口。

主要是对已有代码的重复利用。

备忘录模式

在不破坏封装的情况下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存状态。

组合模式

将对象组合成树形结构以表示"整体-部分"的层次结构。单个对象和组合对象的使用具有一致性,就像透明的。

透明模式和安全模式区别

前者不要区别对待单个对象与组合对象后者要。

迭代器模式

提供一种方法,顺序访问聚合对象内元素的顺序,但又不暴露该对象的内部表示。

单例模式

保证一个类只被实例化一次,并且提供一个全局化获取入口。

饿汉式和懒汉式加载方式

多线程下的单例

双重锁定

桥接模式

将一个类中抽象部分与实例部分分离。

桥接模式就是合成/聚合模式原则得使用范例。

a是b的一部分并且不可分离就是合成

a是b的一部分并且可以分离就是聚合

命令模式

将请求封装成为一个对象,从而使客户端可以参数化请求对象。命令模式可以用来记录日志,对请求排列,撤销以及重做。

职责链模式

使多个对象都能处理请求,请求的发送者与接受者减少耦合,请求就像一条链一样在接受对象之间传递,直到能处理的对象。

中介者模式

使用中介对象将一系列对象的交互封装,减少对象之间的耦合,而且可以独立的改变它们之间的交互。

享元模式

说得直白就是共享实例,节约内存。

创建的对象多或者占据内存量大的时候就可以使用享元模式。

解释器模式

给定一个语言,定义它的文法的一种表示并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

对于一些频率比较高的问题,定义成为一段语句,使用解释器来解决这些问题。(解释器复杂化就是解释一门语言)

当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可以使用解释器模式。

访问者模式

表示一个作用于某对象结构中的各个元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

访问者模式的目的是要把处理从数据结构分离出来。有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的,因为访问者模式使得算法操作的增加变得容易。

缺点增加新的数据结构变得困难。

大化设计模式各类模式原则总结相关推荐

  1. 大化设计模式——简单工厂模式(一)

    参考程杰<大化设计模式>,把里面的代码用Java重新实现了一遍 定义运算类: package simpleFactoryPattern; /** * @author lei_chunhui ...

  2. 设计一个矩形类rectangle_万字长文带你捋清六种设计模式的设计原则(建议收藏)...

    对于设计模式,自己很早之前就看了好多本设计模式书籍,其中一些还看了好几遍,也一直希望自己能在编码的时候把这些设计模式用上去.可是,在日常的打码中,用的最多的就是单例,其次是观察者和建造者模式 ( bu ...

  3. Python设计模式-外观模式

    Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...

  4. Python设计模式-桥接模式

    Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...

  5. Python设计模式-代理模式

    Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...

  6. [Head First设计模式]餐馆中的设计模式——命令模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

  7. Java设计模式(备忘录模式-解释器模式-状态模式-策略模式-职责链模式)

    Java设计模式Ⅶ 1.备忘录模式 1.1 备忘录模式概述 1.2 代码理解 2.解释器模式 2.1 解释器模式概述 3.状态模式 3.1 状态模式概述 3.2 代码理解 4.策略模式 4.1 策略模 ...

  8. [Head First设计模式]生活中学设计模式——迭代器模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

  9. 设计模式-Adapter模式

    目录 相关概念 对象适配器 类适配器 一个例子 总结 适配器模式(Adapter Pattern)是结构型模式.主要用来解决接口不兼容的问题,将一个类的接口变换成客户端所期待的另一种接口,从而使原本因 ...

最新文章

  1. C/C++ 头文件 #pragma once vs #ifndef
  2. so 问题来了,你现在值多少钱?
  3. Oracle RAC安装过程中所使用的一些配置
  4. 【渝粤题库】国家开放大学2021春1254计算机组成原理题目
  5. 懒人专用SSH框架下的基本配置
  6. Hivesql里的limit使用误区
  7. JavaScript基础(ECMAScript)
  8. iOS xib开发小技巧
  9. python 的内置函数
  10. python smtplib发送邮件可直接运行代码
  11. 网络 猫,路由器,交换机连接设置
  12. MongoDB 清理数据
  13. [CSP-S模拟测试]:赤壁情(DP)
  14. matlab从无到有系列(六):高级图形处理功能(多窗口绘图以及花瓶绘制)
  15. 算法系列——贝尔曼福特算法(Bellman-Ford)
  16. 模电数电自动控制原理实验台QY-MS301C
  17. 传奇微端大带宽服务器如何选择
  18. Linux ls 命令学习和简单使用
  19. LattePanda 外壳 HOTe-LPA 铝合金外壳
  20. 代码随想录算法训练营第07天 | LeetCode 454.四数相加2,383. 赎金信,15. 三数之和,18. 四数之和,总结

热门文章

  1. 人工智能在智能家居安防系统中的应用:让家庭更智能、更安全
  2. 国地级市月度平均房价-含省市、时间、价格(更新至2021年7月)
  3. 标准信息公共服务:某市标准技术研究院数据治理项目
  4. Android版本的”Wannacry”文件加密病毒样本分析(附带锁机)
  5. 啊!程序员老婆拯救了老公的发际线!!!
  6. 端口扫描工具 Nmap(一)
  7. 计算机对比度亮度调整,电脑对比度和亮度多少合适_电脑最佳的亮度和对比度-win7之家...
  8. android 应用 电影资讯
  9. 二、Processing 坐标与基本图形
  10. 论文阅读:CVPR2020 | MoCo:Momentum Contrast for Unsupervised Visual Representation Learning