• 六大原则
  • 23种设计模式:
  • 总体来说设计模式分为三大类:

*创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

*结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

*行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:

1.单一职责原则(SRP)————【面向接口编程时】

应该有且仅有一原因引起类的变更;(低耦合),面向接口编程时,一个职责一个接口,分工单纯明确。也可以对于接口、方法时用。

2.里氏替换原则————【面型对象 继承时】

 所有引用基类的地方必须能透明地使用其子类的对象;
(只要父类能出现的地方子类就可以出现,而且可以替换子类也不会产生任何错误或异常,但是反过来不行,有子类出现的地方,父类未必能适应。)
尽量避免子类“个性”和父类关系之间难调和;例子:手枪、步枪、机枪的实现类。

4中含义:

1.子类必须完全实现父类方法;2.子类可以有自己的个性;3.覆盖或实现父类的方法时输入参数可以放大(“契约优先设计”,前置条件就是你要让我执行,就必须满足我的条件;后置条件就是我执行完了需要反馈标准是什么。)4.覆盖或实现父类的方法时输出结果可以缩小;

继承的优点如下:
* 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性;
* 提高代码的重用性;
* 子类可以形似父类,但又异于父类,“龙生龙,凤生凤,老鼠生来会打洞”是说子拥有父的“种”,
“世界上没有两片完全相同的叶子”是指明子与父的不同;
* 提高代码的可扩展性,实现父类的方法就可以“为所欲为”了,君不见很多开源框架的扩展接口都是通过继承父类来完成的;
* 提高产品或项目的开放性。 继承的缺点如下:
* 继承是侵入性的。只要继承,就必须拥有父类的所有属性和方法;
* 降低代码的灵活性。子类必须拥有父类的属性和方法,让子类自由的世界中多了些约束;
* 增强了耦合性。当父类的常量、变量和方法被修改时,需要考虑子类的修改,而且在缺乏规范的环境下,
这种修改可能带来非常糟糕的结果——大段的代码需要重构。 Java使用extends关键字来实现继承,它采用了单一继承的规则,C++则采用了多重继承的规则,一个子类可以继承多个父类。

3.依赖倒置原则————【面向接口编程时】

高层模块不应该依赖底层模块、两者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
【每个逻辑的实例都是由原子逻辑组成,不可分割的原子逻辑就是底层模块,原子逻辑的再组装就是高层模块】
【Java中抽象就是指接口或抽象类,两者都不能直接被实例化的;
细节就是实现类,实现接口或继承抽象类而产生的类就是细节,可以直接被实例化,也就是可以加上关键字New产生一个对象】 模块间的依赖通过抽象来发生,实例类之间不发生直接的依赖关系,其依赖关系是通过接口或者抽象类产生的;
接口或抽象类不依赖于实现类;实现类依赖接口或者抽象。【Java语言中】

依赖可以传递的,a-b-c... 只要做到抽象依赖,即使是多层的依赖传递也无所畏惧。

对象的依赖关系有三种方式来传递:

1.构造函数传递依赖对象;

2.Setter方法传递依赖对象;

3.接口声明依赖对象;

并行开发的最大的危险就是分险扩散:一段程序异常,波及到一个功能,一个模块,甚至毁掉整个项目。

4.接口隔离原则————【】

Page63

参考:

*Java开发中的23种设计模式详解

纯属个人观点,仅供参考!

Java开发23种设计模式之禅的更多相关文章

  1. Java 开发23种设计模式

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  2. Java开发23种设计模式

    设计模式(Design Patterns) -- --  -- 可复用面向对象软件的基础 设计模式(Design Patterns)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. ...

  3. Java实现23种设计模式

    一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接 ...

  4. Java的23种设计模式(转)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  5. Java的23种设计模式<一>

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...

  6. java的23种设计模式之建造者模式

    场景和本质 场景 本质 案例 原理 应用场景 场景和本质 场景 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样一个问题需要处理:装配这些子组件是不是有个步骤问题? ...

  7. 从追MM谈Java的23种设计模式(转)

    从追MM谈Java的23种设计模式    这个是从某个文章转载过来的.但是忘了原文链接.如果知道的,我追加一下. 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西 ...

  8. JAVA:23种设计模式详解(转)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  9. 从追MM谈Java的23种设计模式

    从追MM谈Java的23种设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡 ...

随机推荐

  1. Selenium 、WebDriver :Capability

    Selenium | WebDriver Capability 内容摘要: 1.WebDriver 通用配置 2.RemoteWebDriver特有配置 3.Grid特有配置 4.在使用特定浏览器时的 ...

  2. 个人技术博客--团队Git规范(参考西瓜学长)

    援引西瓜学长:GitHub团队项目合作流程 废话少说直接写 1.fork 1.对于组员来说第一步就是fork 2.点击fork之后 上面是我们的团队仓库 切换回自己的仓库 就会看到 是fork于团队仓 ...

  3. php单例模式实现对象只被创建一次

    这是我在php面试题中遇到的一道试题,单例模式按字面来看就是某一个类只有一个实例,这样做的好处还是很大的,比如说数据库的连接,我们只需要实例化一次,不需要每次都去new了,这样极大的降低了资源的耗费. ...

  4. yii2 修改验证码小部件样式

    <?= $form->field($model, 'verifyCode',['labelOptions' => ['class' => 'yanzhengma','style ...

  5. Qt 编程指南 8 显示静态小图片和动态大图片

    显示控件概览 图片浏览示例 第一行是一个标签控件,objectName 为 labelShow,文本内容清空,因为是用来显示图片用的. 主界面第二行的控件是四个普通按钮 第一个按钮文本是 " ...

  6. WebService基础入门 CXF(WS + RS)

    一.基本介绍 Web Services是一个软件接口,它描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作.它使用基于 XML 语言的协议来描述要执行的操作或者要与另一个 Web 服务交换 ...

  7. Linux系统学习之软件安装

    一.源码包编译安装 由于计算机无法直接执行用高级语言编写的源程序,因此想要运行程序,就需要一种机制来让计算机识别,这样程序才可能运行起来.一般来说,计算机中存在解释型和编译型两种语言. 所谓解释型语言 ...

  8. 3990 [模板]矩阵快速幂 洛谷luogu

    题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k ...

  9. bat无故报错打印混乱的解决

    1. 下面语句加了一个无意义的ping操作.不加的时候经常报错,报操作数不是数字,实际上打印发现NOW值和格式并没有错误.怀疑是下面操作数太多了,而执行速度又太快,导致执行时总是很容易出错.通过增加一 ...

  10. Python基础(dict 和 set) 字典和set

    dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例子,假设要根据同学的名字 ...