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

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. js 父组件向子组件传参

    有一个父组件页面如上,点击新增或者修改都会弹出同一个子组件如下: 父组件传参到子组件有两种方式: 一.直接把对象当成参数传给子组件,(看上去更简单,经测试发现一个问题,因为新增时要置空对象的所有信息, ...

  2. H264解码器源码(Android 1.6 版)

    H264解码器源码,移植ffmpeg中的H264解码部分到Android,深度删减优化,在模拟器(320x480)中验证通过. 程序的采用jni架构.界面部分,文件读取,视频显示都是用java做的,底 ...

  3. VS2008中使用JSONCPP方法小结

    Introduction JSON (JavaScript Object Notation) is a lightweight data-interchange format. It can repr ...

  4. Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源方法

    一.开篇 这里整合分别采用了Hibernate和MyBatis两大持久层框架,Hibernate主要完成增删改功能和一些单一的对象查询功能,MyBatis主要负责查询功能.所以在出来数据库方言的时候基 ...

  5. Ubuntu12.04下安装、使用、卸载MySQL

    转自:http://blog.csdn.net/yimi0903/article/details/11800713 一.安装 Step1:安装MySQL-server,mysql-client 执行以 ...

  6. python在三引号中使用变量

  7. 【转】Cache Buffer Chain 第二篇

    文章转自:http://m.bianceng.cn/database/Oracle/201407/42884.htm 测试环境:版本11gR2 SQL> select * from v$vers ...

  8. 你忘记的java运算符

    当整数被0除时会得到一个无穷大,或者nan, 所以会抛出数据溢出的异常.

  9. struts2-045漏洞浅析

    http://blog.csdn.net/rossrocket/article/details/67674290

  10. 3.4-3.6 依据业务需求分析HBase的表设计

    一.依据[话单]查询需求分析HBase的表设计 1.分析 用户需要进行实时的查询,那么这些数据是放在HBase当中的,每个客户每天接打电话至少20个左右,而通信公司拥有很多用户,每天产生的数据都是上亿 ...