纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

java设计模式--七大原则 java设计模式--七大原则详解

吾仄lo咚锵   2021-07-20 我要评论
想了解java设计模式--七大原则详解的相关内容吗吾仄lo咚锵在本文为您仔细讲解java设计模式--七大原则的相关知识和一些Code实例欢迎阅读和指正我们先划重点:java设计模式,java七大原则下面大家一起来学习吧

设计模式

软件设计模式(Design pattern)又称设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性

打个比方就像盖大厦和小木屋当功能简单函数和代码少时我们能较轻松的直接上手;但如果是像大厦那样功能复杂需求可能变化且代码量大时我们就不能直接上手就来需要像建筑图纸那样提前规划设计那设计模式就像软件(程序)的建筑图纸

设计模式的目的是为了让软件(程序)具有更好的:

1.代码重用性

相同功能的代码不用多次编写降低冗余

2.可读性

编程规范性, 便于其他程序员的阅读和理解

3.可扩展性

当需要增加新的功能时非常的方便也称为可维护性

4.可靠性

当我们增加新的功能后对原来的功能没有影响

5.使程序呈现高内聚低耦合的特性

模块内部紧密但模块间依赖小一者出错不影响他者

单一职责原则

单一职责原则(Single responsibility principle)即一个类应该只负责一项职责如类A负责两个不同职责:职责1职责2当职责1需求变更而改变A时可能造成职责2执行错误所以需要将类A的粒度分解为A1、A2

单一职责原则注意事项和细节

  • 降低类的复杂度一个类只负责一项职责
  • 提高类的可读性可维护性
  • 降低变更引起的风险
  • 通常情况下我们应当遵守单一职责原则只有逻辑足够简单才可以在代码级违反单一职责原则;只有类中方法数量足够少可以在方法级别保持单一职责原则

在这里插入图片描述

接口隔离原则

接口隔离原则(Interface Segregation Principle)即客户端不应该依赖它不需要的接口即一个类对另一个类的依赖应该建立在最小的接口上

比如:类A通过接口 I I I依赖类B类C通过接口 I I I依赖类D如果接口 I I I对于类A和类C来说不是最小接口那么类B和类D必须去实现他们不需要的方法

在这里插入图片描述

按隔离原则应当这样处理:将接口 I I I拆分为独立的几个接口将类分别与他们需要的接口建立依赖关系也就是采用接口隔离原则

在这里插入图片描述

依赖倒转原则

依赖倒转原则(Dependence Inversion Principle)依赖倒转(倒置)的中心思想是面向接口编程所谓“倒转”是指抽象不应该依赖细节而是细节应该依赖抽象也就是高层模块不应该依赖低层模块二者都应该依赖其抽象因为相对于细节的多变性抽象的东西要稳定的多

比如有个Person类可以接受Email、QQ和微信的消息如果都为其提供一个专门的方法就会让代码非常的冗余:

在这里插入图片描述

可以引入一个IReceiver接口让Person类依赖该接口这样QQ、微信和Email各自实现IReceiver里面的方法即可:

在这里插入图片描述

里氏替换原则

里氏替换原则(Liskov Substitution Principle)要求所有引用基类的地方必须能透明地使用其子类的对象也就是在继承关系中子类尽量不要重写父类的方法继承实际上让两个类耦合性增强了特别是运行多态比较频繁的时整个继承体系的复用性会比较差比如一种极端情况:一个类继承了另一个类但却重写了所有方法那么继承的意义何在?说好的复用呢?

在这里插入图片描述

解决方法是把原来的父类和子类都继承一个更通俗的基类在适当的情况下可以通过聚合组合依赖等来代替

在这里插入图片描述

开闭原则

开闭原则(Open Closed Principle)一个软件实体如类模块和函数应该对扩展开放(对提供方)对修改关闭(对使用方)也就是当软件需要变化时尽量通过扩展软件实体的行为来实现变化而不是通过修改已有的代码来实现变化用抽象构建框架用实现扩展细节开闭原则是编程中最基础、最重要的设计原则编程中遵循其它原则以及使用设计模式的目的就是遵循开闭原则

举个违反开闭原则的例子:

矩形Retangle和圆形Circle继承了图形类Shape(提供方)画图类GraphicEditor(使用方)会调用相关属性

在这里插入图片描述

但是如果再新增一个三角形就要在使用方GraphicEditor新增对应方法修改地方较多违背开闭原则

在这里插入图片描述

改进:把Shape做成抽象类并提供抽象方法draw让子类去实现即可当新增图形种类时只需让新的图形类继承Shape并实现draw方法即可使用方的代码就不需要修改满足开闭原则

在这里插入图片描述

迪米特法则

迪米特法则(Demeter Principle)又叫最少知道原则即一个类对自己依赖的类知道的越少越好核心是降低类之间的耦合也就是说对于被依赖的类不管多么复杂都尽量将逻辑封装在类的内部对外除了提供的public 方法不对外泄露任何信息避免与非直接朋友的耦合只与直接的朋友通信所谓的直接朋友是出现成员变量方法参数方法返回值中的类而出现在局部变量中的类不是直接的朋友也就是说陌生的类最好不要以局部变量的形式出现在类的内部

比如有学院员工类和学校员工类然后各有一个管理类有可以获取其所有员工学校员工管理类有方法打印全部员工

在这里插入图片描述

具体代码:

void printAllEmployee(CollegeManager sub) {
		//获取到学院员工
		List<CollegeEmployee> list1 = sub.getAllEmployee();
		System.out.println("---学院员工---");
		for (CollegeEmployee e : list1) {
			System.out.println(e.getId());
		}
		//获取到学校总部员工
		List<Employee> list2 = this.getAllEmployee();
		System.out.println("---学校员工---");
		for (Employee e : list2) {
			System.out.println(e.getId());
		}
	}

分析SchoolManager类发现Employee和CollegeManager都是它的直接朋友(出现在参数和返回值中)但CollegeEmployee不是直接朋友是以局部变量的形式违背了迪米特原则

改进:避免依赖CollegeEmployee封装在CollegeManager中对外提供public方法即可

在这里插入图片描述

void printAllEmployee(CollegeManager sub) {
		sub.printEmployee();
		//获取到学校总部员工
		List<Employee> list2 = this.getAllEmployee();
		System.out.println("---学校员工---");
		for (Employee e : list2) {
			System.out.println(e.getId());
		}
	}

合成复用原则

合成复用原则(Composite Reuse Principle)就是是尽量使用合成/聚合的方式而不是使用继承

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结

设计原则核心思想

针对接口编程把应用中可能需要变化的代码和不需要变化的代码分开独立都是为了交互对象间解耦合而操心

本篇文章就到这里了希望能给你带来帮助也希望您能够多多关注的更多内容!


相关文章

猜您喜欢

  • Vue 3D标签云 Vue中实现3D标签云的详细代码

    想了解Vue中实现3D标签云的详细代码的相关内容吗仲夏今天也在写前端在本文为您仔细讲解Vue 3D标签云的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Vue,3D标签云,Vue,标签云下面大家一起来学习吧..
  • Java计算器功能 用Java实现简单计算器功能

    想了解用Java实现简单计算器功能的相关内容吗杏黄的三叶草在本文为您仔细讲解Java计算器功能的相关知识和一些Code实例欢迎阅读和指正我们先划重点:java,计算器下面大家一起来学习吧..

网友评论

Copyright 2020 www.gamerfx.net 【游戏天空】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式