在所有的设计模式开篇中,总是说一个好的架构,或多或少都会有设计模式的出现。当然或多或少也会使用设计模式的相关原则:

SOLID+迪米尔原则


1.优化代码的第一步:单一职责原则

S:单一职责链原则:英文名称为Single Responsibility Principle(SRP)

定义:就一个类而言,应该仅有一个引起它变化的原因。通俗来说:一个类中应该有一组相关性很高的函数、数据的封装。但是在设计模式之禅中说这个说法的争议比较大,因为单一职责的划分界限并不是那么清晰的。就像明明知道数据库设计的时候要保持一条记录的原子性,但是为了方便后期操作的时候,不需要进行表连接而快速的获取到数据,会出现部分冗余的字段。


2.让程序更稳定、更灵活的:开闭原则

O:开闭原则:英文名称为:Open Close Principle(OCP),它是Java里面最基础的设计原则:

定义:软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是对于修改是封闭的。

软件开发中最让人烦恼的不是产品设计出来的功能不能实现,而是实现出来之后,下个版本要对本功能进行修改。但是如果我们修改原先的代码不能保证原先软件模块的正确性。如果我们开发的是第三方的Jar包,已经将jar给其它客户了,下个版本更新的时候要让用户所有用到jar文件的地方都要修改这很明显是十分不合理的,此时开闭原则显得非常重要。


3.构建扩展性更好的系统:里氏替换原则

L:里氏替换原则:英文名称为:Liskov Substitution Principle(LSP)

定义:所有引用基类的地方必须能透明的使用子类的对象。

面向对象三大特点:封装、继承、多态。李氏替换原则依赖于继承与多态。通俗的讲:只要父类能出现的地方,其子类一定可以出现,而且替换成子类也不会产生任何异常和错误,调用者根本就不需要知道当前调用的对象是子类还是父类。反之则不一定成立,有子类出现的地方,父类未必能适应。总结两个字就是:抽象。

里氏替换原则的核心就是抽象,抽象又依赖于继承这个特性。在OOP编程中:继承的优缺点相当明显:

优点:

1)代码重用,减少创建类的成本,每个子类都拥有父类的属性和方法

2)子类和父类基本相似,但是又比父类多了自己的特征

3)提高代码的可扩展性

继承的缺点:

从侧面上看,继承的优点基本上也就是它的缺点:

1)继承是侵入式的,只要继承就必须拥有父类的所有属性和方法。(连拒绝接收遗产的资格都没有)

2)因为子类继承了父类属性和方法,可能导致子类代码冗余。

开闭原则和里氏替换原则是相互依靠的,通过里氏替换来达到对扩展开放,对修改关闭的效果。


4.系统有更高的灵活性:接口隔离原则

I:接口隔离:InterfaceSegregation Principle(ISP)

定义:类间的依赖关系应该建立在最小的接口上。通俗的讲:让客户端依赖的接口尽可能的小


5.让项目拥有变化的功能:依赖倒置原则

D:依赖倒置:Dependence Inversion Principle(DIP)重点在解耦上面

定义:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口和抽象类产生的。

更好的扩展性:迪米特原则

6.迪米特原则:Law of Demeter(LOD)

定义:一个对象应该对其它对象有最少的了解。通俗的说,一个类对自己需要耦合或者调用的类知道的最少,类的内部如何实现与调用者或者依赖者没有关系,调用者或者依赖者只需要知道它需要的方法即可,其它的一概不用管。类与类之间的关系越密切,耦合度越大,当一个类放生改变的时候,对另一个类影响也越大。

Java设计模式开篇的更多相关文章

  1. JAVA设计模式——开篇

    设计模式很重要,重要性我就不再复述了.最主要的是,通常我们在写一定量代码后,常用的方法什么的都熟悉后,想再提高代码能力,我找到的最好的方法还是去学习,理解设计模式.不理解设计模式,看一些开源框架和ja ...

  2. 初探Java设计模式1:创建型模式(工厂,单例等)

    Java 设计模式 一直想写一篇介绍设计模式的文章,让读者可以很快看完,而且一看就懂,看懂就会用,同时不会将各个模式搞混.自认为本文还是写得不错的,花了不少心思来写这文章和做图,力求让读者真的能看着简 ...

  3. 【java设计模式】-00目录

    开篇 [java设计模式]-01设计模式简介 创建型模式: [java设计模式]-02工厂模式(Factory Pattern) [java设计模式]-03抽象工厂模式(Abstract Factor ...

  4. 12天,这本《重学Java设计模式》PDF书籍下载量9k,新增粉丝1400人,Github上全球推荐榜!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言

  5. java设计模式- (1)单例模式

    参加校园招聘的笔试,发现公司都会考一些java设计模式,所以上网查询相关内容,总结常用的几种单例模式. 单例模式(Singleton Pattern)是 Java中最简单的设计模式之一.这种类型的设计 ...

  6. JAVA 设计模式 桥接模式

    用途 桥接模式 (Bridge) 将抽象部分与实现部分分离,使它们都可以独立的变化. 桥接模式是一种结构式模式. 结构

  7. java设计模式 策略模式Strategy

    本章讲述java设计模式中,策略模式相关的知识点. 1.策略模式定义 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户.策略模式属于对象的 ...

  8. Java设计模式之行为型模式

    行为型模式共11种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 策略模式:策略模式的决定权在用户,系统本身提供不同 ...

  9. Java设计模式(三) 抽象工厂模式

    原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...

随机推荐

  1. 【linux】lsof命令和{Linux下文件删除、句柄与空间释放问题}

      导读: 一.用事实说话 二.关于LSOF命令的其它用法: 三.参考文档:   正文: lsof:Finding open files with lsof 作用:查看文件被哪些进程打开 一.用事实说 ...

  2. java.lang.NoSuchMethodException: com.sun.proxy.$Proxy

    删掉了@Transactional注解,结果成功了 是这个注解造成的. 是ssh2的整合强制我们使用分层架构.

  3. OCX控件避免弹出安全警告的类

    1.要加一个头文件:         #include <objsafe.h>2.在控件头文件中加入: 1 DECLARE_INTERFACE_MAP()2 BEGIN_INTERFACE ...

  4. phpStorm的远端部署

    首先远端服务器的路径: /var/www -rwxrwxrwx jiangzhaowei jiangzhaowei 6月 index.html* lr-xr-xr-x root root 2月 php ...

  5. Java中的双重检查(Double-Check)详解

    在 Effecitve Java 一书的第 48 条中提到了双重检查模式,并指出这种模式在 Java 中通常并不适用.该模式的结构如下所示: ? 1 2 3 4 5 6 7 8 9 10 public ...

  6. Sense2vec with spaCy and Gensim

    如果你在2015年做过文本分析项目,那么你大概率用的是word2vec模型.Sense2vec是基于word2vec的一个新模型,你可以利用它来获取更详细的.与上下文相关的词向量.本文主要介绍该模型的 ...

  7. 八、MyEclipse多次重装、删除注册表、重装系统激活都不成功,终极解决方法 - imsoft.cnblogs

    MyEclipse(2010,2014)激活不成功的结论: [问题原因]激活不成功时,主要是激活的密钥文件.myeclipse.properties不在指定的位置.(一般都在D.E.F.G等盘符根目录 ...

  8. sublime配置java环境

    今天突然不想用eclipse编写java了,觉得sublime挺好用,就想用sublime配置java环境,以下是过程以及出现的问题. 一.配置Java环境 1.打开我的电脑–属性–高级–环境变量 2 ...

  9. 1.22-1.24 Oozie企业使用案例

    一.将hive的表数据用sqoop抽取到mysql 1.编写oozie workflow和Coordinator ## [root@hadoop-senior oozie-apps]# pwd /op ...

  10. Flutter实战视频-移动电商-61.购物车_商品数量的加减操作

    61.购物车_商品数量的加减操作 provide/cart.dart pages/cart_page/cart_count.dart 先引入provide和cartProvide 定义接收一个item ...