单一职责原则 单一职责原则:一个类应该只有一个原因引起改变,即一个类应该只负责一个业务逻辑. 问题由来:类T负责t1, t2两个职责,当因为t1j对类T修改的时候,可能导致类T出现问题而影响职责t2. 解决方案:遵循单一职责原则,将类T进行改写,确保一个类负责一个职责. demo: 有一个类Animal,具有方法breath功能,一般的思路是这样子设计的: class Animal { public void breathe(String animal) { System.out.println…
介绍 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小接口上. Demo引入 先来看一张图: interface MyInterface { void operation1(); void operation2(); void operation3(); void operation4(); void operation5(); } class B implements MyInterface { @Override public void operation1() { S…
依赖倒置原则(Dependence Inversion Priiciple,DIP) 介绍 High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Detatils should depend upon abstractions. 翻译过来有是三个意思: 1.高层模块…
1.内容引入--继承体系的思考 在继承中,凡是在父类已经实现的方法,其实算是一种契约或者规范,子类不应该在进行更改(重写):但是,由于这一点不是强制要求,所以当子类进行重写的时候,就会对继承体系产生破坏. 同时,继承带来便利的时候,也有弊端:给程序带来了侵入性,增加了对象之间的耦合性,可移植性低.当你修改基类时,子类都需要进行相应的修改. 那么,如何能够保持继承的优点,同时减少缺点对程序的影响呢?也就是我们要讨论的主角--"里氏替换原则". 2.里氏替换原则的定义 1.第一种定义 如果…
介绍 开闭原则是编程设计中最基本.最重要的原则. 定义:一个软件实体如类.方法和模块等,应该对扩展(提供方)开放,对修改(使用方)关闭.用抽象构建框架,用实现扩展细节. 也就是说,在需求发生新的变化时,我们不应该修改原来的代码,而应该通过扩展来满足新的需求. 例子引入 我们要实现一个画图的功能,能够画出圆形.矩形.三角形等,最常见的思路就是利用面向对象的思想,抽象出一个所有图形对象的基类Shape,具体的图形如矩形.圆形灯继承自该类.在Shape中定义一个变量shapeType来保存具体的图形的…
迪米特原则定义 迪米特原则,也叫最少知道原则,即一个类应该对自己依赖的类知道的越少越好,而你被依赖的类多么复杂,对我都没有关系.也就是说,对于别依赖的类来说,不管业务逻辑多么复杂,都应该尽量封装在类的内部:对外除了必备的public方法,不再泄露任何信息. 1.问题由来 我们知道,类和类是有耦合关系的,关系越密切的两个类之间,其耦合关系越大. 2.对应措施 迪米特原则要求:一个类应该只和之间的直接朋友通信. 1.直接朋友的定义 在上面我们提到了"直接朋友"这个概念,其实,在一个程序对象…
单例模式介绍 单例模式,是为了确保在整个软件体统中,某个类对象只有一个实例,并且该类通常会提供一个对外获取该实例的public方法(静态方法). 比如日志.数据库连接池等对象,通常需要且只需要一个实例对象,这就会使用单例模式. 单例模式的八种模式 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线程不安全) 懒汉式(同步方法) 懒汉式(同步代码块) 懒汉式(双重检查) 静态内部类 枚举 下面依次来说明一下: 饿汉式(静态常量) 通常,我们创建一个对象的方式就是new,但是,当我们考虑只创建一个…
设计模式介绍 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案, 设计模(Design pattern)代表了最佳的实践.这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的. 设计模式的本质提高 软件的维护性,通用性和扩展性,并降低软件的复杂度. <> 是经典的书,作者是 Erich Gamma. Richard Helm. RalphJohnson 和 John Vlissides Design(俗称 "…
前言 现在,很少有人和90年代一样,自己去实现一个软件的各个方面,也就是说,在工作中,和人沟通是必备的技能.那么,作为一枚码农,如何和他人沟通呢?这就要依靠本文的主题了--UML. 简介 UML--Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果.UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类.接口.实现.泛化.依…
基本介绍 合成复用原则的核心,就是尽量去使用组合.聚合等方式,而不是使用继承. 核心思想 1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起. 2.针对接口编程,而不是针对实现编程. 3.为了交互对象之间的松耦合设计而努力.…