所谓无招胜有招,练一门功夫分为内功和外功。外功好比招式,就是所谓的23种设计模式。而内功呢,就是心法,那就是这6种法则。光会外功那是花拳绣腿,内功修为才是境界。如此众多的设计模式,学完2遍,3遍可能也会忘的只记得单例和工厂模式。但是只要原则记住,在以后的设计中,有意无意就会用的设计模式的精髓。
上篇已对六大设计原则做了较深的阐述,而下面再来精简下,以便快速回顾时查看。
一.单一职责原则
不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。
问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。
一句话总结:不能为图代码量少,把牛头马嘴一起往一个类塞。
二.里氏替换原则
1.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
2.子类中可以增加自己特有的方法。
3.当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
4.当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
一句话总结:尽量不要重写父类的已经实现了的方法,可以用接口等其他方法绕过。
三.依赖倒置原则
高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
这里用一个列子来说明:
interface IEAT { public void eat();//抽象吃这个动作 }
class EatApple implements IEAT { @Override public void eat() { //这里是吃苹果 System.out.print("eat a apple"); } }
class EatWater implements IEAT { @Override public void eat() { // 这里是吃水 System.out.print("drink water"); } }
public class Human { //我爱吃东西,吃什么呢,看传入什么 public void dosomething(IEAT ieat) { ieat.eat(); } /* //我爱吃东西,吃什么呢,看传入什么 public void dosomething(String food) { if(food.equals("apple")) { //吃苹果 } if(food.equals("water")) { //喝水 } } */ public static void main(String[] args) { Human human=new Human(); /* human.dosomething("apple"); human.dosomething("water"); */ //给你吃个苹果 human.dosomething(new EatApple()); //再给你喝点水 human.dosomething(new EatWater()); } }
其中注释的就是我们常用的方法。这种方法非常不适于扩展,因为如果要吃香蕉,吃西瓜,又要在dosomething里面写一堆判断。写着写着就混了。
因此一句话总结:多用抽象的接口来描述相同的动作,降低实现这个动作的人和物之间的耦合度。
四.接口隔离原则
客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。
一句话总结:就好比鱼和人两个类,鱼是游泳和腮呼吸两个动作,人是走路和吃饭两个动作,这些动作不能写在一个接口里面,把这四个动作都包含了。要拆成专门对鱼和人的两个接口才行。
五.迪米特法则
迪米特法则又叫最少知道原则,最早是在1987年由美国Northeastern University的Ian Holland提出。通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。
这个有点不好记,总结就是:father1<-child1,father2<-child2,father1和father2是的手下, father1尽量通过father2去访问child2,不要直接在类里面访问child2。下属怎么能随便去领导家的孩子呢,小心别人说你拐卖。
六.开闭原则
这个没啥好说的:尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。
文章来源:http://blog.csdn.net/cq361106306/article/details/38708967
相关推荐
根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...
JAVA设计模式-原则和23种设计模式归纳总结 本资源主要介绍了JAVA设计模式的原则和23种设计模式的总结。设计模式是软件设计中的一种解决方案,能够使软件系统更加灵活、可维护和可扩展。本资源首先介绍了设计模式的...
JAVA设计模式是编程领域中非常重要的概念,它为软件开发人员提供了在特定情境下解决常见问题的模板。设计模式公司出品的《JAVA设计模式》书籍,详细介绍了多种设计模式,适合不同水平的程序员学习和使用。 首先,...
设计模式的六大原则 1. 开闭原则(Open Closed Principle):一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的...
《Java设计模式》是刘伟教授的一本关于设计模式的教材,主要面向高等学校的学生和对Java编程有深入兴趣的开发者。设计模式是软件工程中的一种重要思想,它封装了在特定场景下的问题解决方案,可以提高代码的可读性、...
### Java设计模式详解 #### 一、背景与概念 在软件工程领域,设计模式是一种用于解决常见问题的可重用解决方案。《Java设计模式PDF》是一本由James W. Cooper编写的经典书籍,该书详细介绍了Java编程语言中的设计...
面向对象的六大基本原则包括开闭原则、里氏替换原则、合成聚合原则、依赖倒转原则、迪米特法则和单一职责原则。这些原则有助于指导开发者编写高质量的面向对象代码。 ### 22. 方法和数据的集中 在存在继承关系的...
本系统基于六种设计模式,运用到的设计模式有备忘录模式,简单工厂模式,迭代器模式,状态模式,模版方法模式,单例模式。 具体实现过程、UML类图以及实现效果详见如下项目说明地址: ... 该系统为绘图系统,该系统通过...
### JAVA设计模式的六大原则 #### 一、开闭原则(Open-Close Principle) **定义:** 开闭原则强调的是软件实体(类、模块、函数等)应该是可扩展的但不可修改的,即软件实体应该对扩展开放,对修改关闭。 **实践...
本文将着重探讨创建型模式、结构型模式和行为模式这三大类设计模式,并结合六项设计原则进行深入解析。 首先,我们来看创建型模式。创建型模式关注于对象的创建,它们提供了创建对象的灵活方式,使得代码更具复用性...
### Java设计模式经典教程知识点概览 #### 一、设计模式概述 设计模式是一种软件设计方法,它为软件开发者提供了一种标准化的方式去解决常见的软件设计问题。设计模式的使用可以提高代码的可读性和可维护性,同时...
文档"Java-设计模式.pdf"详细介绍了设计模式六大原则和工厂设计模式的应用。 设计模式的六大原则包括: 1. 单一原则(Single Responsibility Principle, SRP):要求每个类或方法只承担单一职责,即一个类或方法只...
1.单一职责原则: 不要存在多于一个导致类变更的原因 ...接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合。而开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭。
Java设计模式是软件工程中常见的设计范式,用于解决特定问题,提升代码的可维护性、可复用性和可扩展性。Java共有23种设计模式,它们可以根据不同的场景和目的被分类为三大类:创建型模式、结构型模式和行为型模式。...
以上便是Java设计模式的主要知识,每一个设计模式都围绕着面向对象的六大设计原则来展开,它们分别是单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则和合成复用原则。单一职责原则...
### 后端-设计模式-java-精讲 #### 一、设计模式概述 设计模式是在软件工程领域中,为了应对特定的问题或需求而形成的最佳实践的解决方案。它们为解决常见问题提供了一种标准的方法,有助于提高代码的复用性、...
本资源摘要信息是对《韩顺平_Java设计模式笔记.docx》的总结和分析,该笔记涵盖了 Java 设计模式的基础知识、设计模式的七大原则、原型设计模式、解释器设计模式、单例设计模式等内容,并对每个设计模式的原理、实现...
详细介绍了设计模式六大原则,配有示例代码和图片,有开闭原则,单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则等等。