继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用!
3.5 接口隔离原则
3.5.1 特点
使用的类不应该被迫依赖于不想使用的方法,应该依赖接口方法
3.5.2 案例(安全门)
- 防火功能代码
public interface FireProof {
public void fireProof();
}
- 防水功能代码
public interface WaterProof {
public void waterProof();
}
- 防盗功能代码
public interface AntiTheft {
public void antiTheft();
}
- 安全门类代码
public class SafetyDoor1 implements WaterProof,FireProof,AntiTheft{
@Override
public void antiTheft() {
System.out.println("防盗");
}
@Override
public void fireProof() {
System.out.println("防火");
}
@Override
public void waterProof() {
System.out.println("防水");
}
}
- 测试类代码
public static void main(String[] args) {
SafetyDoor1 door1 = new SafetyDoor1();
door1.fireProof();
door1.waterProof();
door1.antiTheft();
}
- 关系图
![[Pasted image 20221227152903.png]]
3.6 迪米特原则
3.6.1 特点
- 又称最少知识原则
- 若两实体之间无需进行通信,则不应该直接调用,可以通过第三方来转发调用
- 当前对象本身,成员对象,所创对象,方法参数等或当前对象与其存在关联、聚合和组合关系则直接访问
3.6.2 案例(明显与粉丝及媒体公司)
- 明星代码
public class Stars {
private String name;
public Stars(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
- 粉丝代码
public class Fans {
private String name;
public Fans(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
- 媒体公司代码
public class Company {
private String name;
public Company(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
- 经纪公司代码
public class AgentCompany {
private Stars stars;
private Fans fans;
private Company company;
public void setStars(Stars stars) {
this.stars = stars;
}
public void setFans(Fans fans) {
this.fans = fans;
}
public void setCompany(Company company) {
this.company = company;
}
// 粉丝见面会
public void meetings()
{
System.out.println(stars.getName() + "与粉丝"+fans.getName() + "见面");
}
// 媒体公司洽谈
public void business()
{
System.out.println(stars.getName() + "与媒体公司"+company.getName() + "洽谈");
}
}
- 测试代码
public static void main(String[] args) {
// 创建经纪人
AgentCompany agentCompany = new AgentCompany();
// 创建明星对象
Stars stars = new Stars("许嵩");
agentCompany.setStars(stars);
// 创建粉丝
Fans fans = new Fans("李四");
agentCompany.setFans(fans);
// 创建媒体公司对象
Company company = new Company("海蝶");
agentCompany.setCompany(company);
// 和粉丝见面
agentCompany.meetings();
// 和媒体公司洽谈
agentCompany.business();
}
- 关系图
3.7 合成复用原则
3.7.1 先组合或聚合
- 维持类封装性,,因成分对象看不见故为”黑箱“复用
- 降低对象间耦合性
- 灵活性高
3.7.2 再继承
- 破坏类封装性,称“白箱”复用
- 子类父类耦合度高
- 限制灵活性