Java设计模式中接口隔离原则是什么?迪米特原则又是什么,啥又是合成复用原则,这些又怎么运用

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库Java设计模式克隆下载学习使用!

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();  
    }
  • 关系图
    ![[Pasted image 20221227160108.png]]

3.7 合成复用原则

3.7.1 先组合或聚合

  • 维持类封装性,,因成分对象看不见故为”黑箱“复用
  • 降低对象间耦合性
  • 灵活性高

3.7.2 再继承

  • 破坏类封装性,称“白箱”复用
  • 子类父类耦合度高
  • 限制灵活性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值