• 六大原则
  • 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. Linq2DB之研究和探索

    1,对linq2db使用看法 最近在研究linq2db,用起来还不错,性能还不错的.之前也在博客园有些网友说用ado.net和depper写SQL语句,性能还要高.有时候牺牲点性能,为了提高开发效率, ...

  2. JQuery 获取多个select标签option的text内容

    根据option的id属性,修改text值 $("#sel_div .select_class option[id='-选择省-']").text(data.province).a ...

  3. MATLAB常微分方程的数值解法

    MATLAB常微分方程的数值解法 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 一.实验目的 科学技术中常常要求解常微分方程的定解问题,所谓数值解法就是 ...

  4. 阿里八八β阶段Scrum(5/5)

    今日进度 陈裕鹏: 简单信息抽取编码完成 叶文滔: 处理了信息抽取编码的一些BUG,修复了日程界面不会自动更新添加的日程的BUG,修改了原先测试用的TAG以及数据分析部分数据计算数值错误的问题 王国超 ...

  5. 求助pycharm里import pandas遇到No module named pandas怎么办

    目测是安转pandas库之后pycharm对库的检索没有更新.(能理解意思就行,我也是小白,不会专业术语,刚巧我也遇到了这样的问题所以来回答)我当时解决这个问题也算是瞎猫遇见死耗子. &amp ...

  6. redis类与用法

    <?phpnamespace app\common\model; class Cache { public $redis = null; public function __construct( ...

  7. 20145236《网络对抗》Exp7 网络欺诈技术防范

    20145236<网络对抗>Exp7 网络欺诈技术防范 一.基础问题回答 通常在什么场景下容易受到DNS spoof攻击? 随便连接没有设置密码的wifi的情况下比较容易受攻击,因为这样就 ...

  8. 转载 使用axis2构建webservice

    axis2是可以实现webservice的一个插件,使用这个插件可以发布webservice 1:可以使用这个插件来发布webservice,可以看网址:http://clq9761.iteye.co ...

  9. Tomcat 9.0 配置问题 403 Access Denied

    tomcat9.0 管理页面如:http://10.10.10.10:8080/manager/html出现如下错误: 403 Access Denied 1.需要配置: Tomcat/conf/to ...

  10. 一个网工的Linux学习过程

    机缘巧合下,在快要毕业时找到了一份网络工程师的工作,对于学习通信工程的我来说,也不算是跨专业就业吧.在入职之前也了解了一下网络工程师的学习路径,网络工程师是从事计算机信息系统的设计.建设.运行和维护工 ...