Java 面向对象开发的五大原则

本文详细介绍了Java面向对象设计的五大原则:单一职责原则(SRP)、开放-封闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。每个原则都包含其核心思想、主要原则和实例,旨在帮助开发者理解如何创建可扩展、低耦合和高内聚的代码,提高软件的可维护性和可复用性。
摘要由CSDN通过智能技术生成

0 - 概要

五大原则简称:SOLID
S-SingleResponsibility-单一职责原则
O-OpenClose-开闭原则
L-LiskovSubstituion-里氏替换原则
I-InterfaceSegregation-接口隔离原则
D-DependencyInversion-依赖倒置原则

1 - 单一职责原则

核心思想:

一个类,最好只做一件事,只有一个引起它的变化。
单一职责原则可以看作是低耦合高内聚思想在面向对象上的引申,将职责定义为引起变化的原因,通过减少引起变化的原因(单一职责),来提高类的内聚性。当一个类的职责过多时,引起它变化的原因就会增多,这将导致职责间的互相依赖增多,从而就破坏了耦合度和内聚性。

主要原则:

示例:

// 历史做法
class Calculator {
   
	int a;
	int b;
	public Calculator(int a, int b) {
   
		this.a = a;
		this.b = b;
	}
	public int add() {
   return a + b;}
	public int sub() {
   return a - b;}
	public int mul() {
   return a * b;}
	public int div() {
   return a / b;}
}
# 此时若要新增一个阶乘计算,就得在原始类中进行修改,一招不慎就可能引入新的复杂度和带来异常
// 单一职责做法
class Calculator {
   
	int a;
	int b;
	public Calculator(int a, int b) {
   
		this.a = a;
		this.b = b;
	}
}
class Add extends Calculator {
   
	public Add() {
   
		super(a, b);
	}
	public int add() {
   return a + b;}
}
class Sub extends Calculator {
   
	public Sub() {
   
		super(a, b);
	}
	public int sub() {
   return a - b;}
}
class Mul extends Calculator {
   
	public Mul() {
   
		super(a, b);
	}
	public int mul() {
   return a * b;}
}
class Div extends Calculator {
   
	public Div() {
   
		super(a, b);
	}
	public int div() {
   return a / b;}
}
# 此时若要新增一个新的职责,则再添加一个类来负责。如此这般,不会在已有类中引入额外的复杂度,也不会带来额外的理解成本,同时也保障了类间的低耦合。

图示:

单一职责的经典案例

2 - 开放-封闭原则

核心思想:

软件实体应该是可扩展、而不可修改的。也就是对扩展开放,对修改封闭。
大白话就是:在增加新功能的时候,能不改代码就尽量不要改,如果只增加代码就完成了新功能,那是最好的。

主要原则:

对扩展开放,意味着当有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况;
对修改封闭,意味着类一旦设计完成,就可以独立完成工作,而不要对其进行任何修改的尝试;
要做到这两点主要就是,要对抽象编程,不要对具体编程,因为抽象是相对稳定的。

示例:

书店售书例子
1. 不满足开闭原则
public interface IBook {
   
	public int price();
	public String name();
	public String author();
}

public class Book implements IBook {
   
	public 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值