【7大设计原则】理解+案例(个人总结)

目录

一、单一职责原则

1.理解

二、开闭原则

1.理解

2.搜狗输入法案例

三、里氏替换原则

1.理解

2.四边形案例

四、依赖倒转原则

1.理解

2.组装电脑案例

五、接口隔离原则

        1.理解

2.电子设备案例

六、合成复用原则

1.理解

2.数据库连接案例

七、迪米特法则

1.理解

2.网络地址案例

八、总结回顾


一、单一职责原则

1.理解

        就是面向对象的思想,每个对象只需要负责好自己的事情,例如此时有一个People类,里面有一些方法,比如送外卖、打螺丝、摸鱼,这些虽然都属于人类的行为,但这样写的话类会显得极为臃肿,此时我们创建外卖员类和打工人类,送外卖就是外卖员的行为,打螺丝和摸鱼就是打工人的行为,这样就划分出了每个类的职责。

二、开闭原则

1.理解

        “对扩展开放,对修改关闭,强调使用抽象接口进行架构,通过实现类来扩展细节”,其实不太好理解,通俗易懂来说就是提供一个接口或者抽象类,通过多个实现类去实现,然后提供一种热插拔的效果。

        例如搜狗输入法的换皮肤功能,皮肤的提供者可能是厂商A或厂商B,此时搜狗输入法就可以为不同厂商提供一个统一的接口,然后厂商去实现这个接口以更换自己的皮肤。和Web开发中MVC架构类似,例如service层,我们要先定义接口,然后去实现这个接口,只不过大多数情况下我们的接口和实现类是1:1的。实现热插拔的效果的话,接口和实现类比例为1:n。

2.搜狗输入法案例

/**
 * 抽象皮肤类
 */
public abstract class AbstractSkin {
    public abstract void display();
}
/**
 * 默认皮肤类
 */
public class DefaultSkin extends AbstractSkin {
    @Override
    public void display() {
        System.out.println("我是默认皮肤");
    }
}
/**
 * 黑马皮肤类
 */
public class HeiMaSkin extends AbstractSkin {
    @Override
    public void display() {
        System.out.println("我是黑马皮肤");
    }
}
/**
 * 搜狗输入法类
 */
public class SouGouInput {
    private AbstractSkin skin;

    public void display() {
        skin.display();
    }

    public void setSkin(AbstractSkin skin) {
        this.skin = skin;
    }
}
/**
 * 开闭原则:对扩展开放,对修改关闭。实现热插拔。我们需要使用到接口或者抽象类
 */
public class Test {
    public static void main(String[] args) {
        //1.创建搜狗输入法
        SouGouInput souGouInput = new SouGouInput();
        //2.插入默认皮肤
        souGouInput.setSkin(new DefaultSkin());
        //3.展示
        souGouInput.display();
        
        //4.替换成黑马皮肤
        souGouInput.setSkin(new HeiMaSkin());
        //5.展示
        souGouInput.display();
    }
}

三、里氏替换原则

1.理解

        “父类出现的地方,子类也一定可以出现;子类可以拓展父类的功能,但不能重写父类原有的功能”

2.四边形案例

        刚开始学面向对象编程的时候,一直是通过extends长方形去实现的正方形,但是这样就不符合里氏替换原则,因为实现正方形的时候重写了长方形已经实现好了的方法。此时我们可以单独抽象出来一个四边形接口或者抽象类,然后正方形和长方形都去实现这个接口,这时对于四边形接口来说,我们只是对其进行了扩展,而不是重写覆盖了原有的功能。

/**
 * 四边形
 */
public interface Quadrilateral {
    double getLength();

    double getWidth();
}
public class Rectangle implements Quadrilateral {
    private double length;
    private double width;

    @Override
    public double getLength() {
        return this.length;
    }

    @Override
    public double getWidth() {
        return this.width;
    }

    public void setLength(double length) {
        thi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值