IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 设计模式的七大原则(一) -> 正文阅读

[Java知识库]设计模式的七大原则(一)

一、前言

  • 通常很多人都认为设计模式原则是六个,而我这里写了七个。大家不要以为是写错了。多余的话就不说了,往下看就行知道了。

二、单一职责原则

2.1、概念

  • 对于类来说,即一个类应该只负责一项职责。如果类A负责两个不同的职责:职责1、指责2。当职责1需求改更而改变A时,可能会造成职责2执行错误。所以需要将类A分解为A1、A2。

2.2、代码演示

  • 下面举一个交通工具运行的例子。
    现在有一个类,用来负责交通工具运行。如下,但是假设现在传递进来的是飞机,就会出现飞机在地上跑这种情况,然而这种情况显然是不对的。
public class Vehicle{
	public void run(String name) {
		Sysout.out.printfln(name + ":在地上跑");
	}
}
  • 解决方案:将每个类的职责分离出来。
  • 交通工具接口
public interface Vehicle{
	public void run(String name);
}
  • 飞行工具
public class AirVehicle implements Vehicle{
	
	@Override
	public void run(String name) {
		System.out.println(name + "在天上飞");
	}
}
  • 水里交通工具
public class WaterVehicle implements Vehicle{
	@Override
	public void run(String name) {
		Sysout.out.println(name + "在水里跑");
	}
}
  • 陆地交通工具
public class LandVehicle implements Vehicle{
	@Override
	public void run(String name) {
		Sysout.out.println(name + "在陆地上跑");
	}
}
  • 测试类
public class Test{
	public static void main(String[] args) {
		LandVehicle lv = new LandVehicle();
		lv.run("汽车");
	}
}

通过将每个类的职能分离出来,从而实现类的纯粹化,即就是单一职责原则;

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

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

三、接口隔离原则

3.1、基本介绍

  • 客户端不应该依赖他不需要的接口,即一个类对另一个类的依赖应该建立在最小接口上。

3.2、传统方法的问题和使用接口隔离原则改进

  • 类A通过接口interface依赖B,类C通过·接口interface依赖类D,如果接口interface对于类A和类C来说不是最小的接口,那么类B和类D必须去2实现他们不需要的方法;
  • 将接口interface拆分为独立的几个接口,类A和类C分别与他们1需要的接口建立依赖关系。也就是采用接口隔离原则。

3.3、代码演示

  • 在正式开始之前,先举一个有问题的例子,方便理解。
  • ClassB依赖于ClassA,去调用func1();但是只需要调用func1()方法,但是ClassA却要实现接口里所有的方法,所以这样写就会使得Class过于复杂。
public interface Interface{
	public void func1();
	public void func2();
	public void func3();
	public void func4();
	public void func5();
}
public class ClassA implements Interface{
	@Override
	public void func1() {
	}

	@Override
	public void func2() {
	}
	
	@Override
	public void func3() {
	}
	
	@Override
	public void func4() {
	}
	
	@Override
	public void func5() {
	}
}
public class ClassB{
	public void depend1(Interface i) {
		i.func1();
	}
}
public class Test {
	public static void main(String[] args) {
		ClassB b= new ClassB();
		b.depend1(new ClassA());
	}
}
  • 因此,提出了接口隔离原则。其实所谓的接口隔离原则就是将一个接口进行分解,将方法分到不同的接口中去。
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-04 10:54:21  更:2022-02-04 10:56:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:52:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码