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

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. 创建calico网络报错client response is invalid json

    使用docker创建calico网络失败. # docker network create --driver calico --ipam-driver calico-ipam testcalico E ...

  2. web缓存概述

    缓存无处不在,所展示出的仅仅是服务器端的缓存,我们从细节层面一层层分析 但是在此之前,我们先要知道什么是缓存与为什么要使用缓存,是时候百度一波喽~ 缓存就是数据交换的缓冲区(称作Cache),当某一硬 ...

  3. Sense2vec with spaCy and Gensim

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

  4. DataWindow.NET 控件 实现点击列头排序

    1.定义字段                         Boolean ib_SetSort = true;                string is_SortType = " ...

  5. Flask_restful 插件实战笔记——基本概念与使用

       最近在Resetful接口设计上想法还是挺多的,也实现了一些需求!想着整理下Flask_restful插件的基本知识,方便日后的复习!   官方地址:https://flask-restful. ...

  6. 【Hadoop】HDFS笔记(三):HDFS的Shell操作

    HDFS处理文件的命令和Linux命令差不多,但注意区分大小写. (Linux区分大小写,Windows不区分大小写) 一.fs命令 键入命令"./bin/hadoop fs"将输 ...

  7. PHP文件操作功能函数大全

    PHP文件操作功能函数大全 <?php /* 转换字节大小 */ function transByte($size){ $arr=array("B","KB&quo ...

  8. Nginx的安装配置和tomcat负载均衡

    Nginx简介 什么是nginx? Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,官方测试ngi ...

  9. 也谈Flash mmorpg地图问题【转】

    网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式:1.整图2.Tile元素拼装3.栅格化切片 整图 整图加载很好理解直接加载一张背景图.这 ...

  10. CodeForces - 377A Maze BFS逆思维

    Maze Pavel loves grid mazes. A grid maze is an n × m rectangle maze where each cell is either empty, ...