软件架构设计原则

1、开闭原则

概念

开闭原则(OCP)是指一个软件实体(如类、模块和函数)应该对扩展开放,对修改关闭。开闭原则是面向对象设计中最基础的设计原则,我们尽可能不修改源代码,但是可以增加新功能。开闭原则的核心思想就是面向抽象编程。

代码例子

当商品打折扣时,并不是修改原来的类,而是扩展一个打折类

public interface ICourse {
    Double getPrice();
}
public class JavaCourse implements ICourse{

    public Double price;

    @Override
    public Double getPrice() {
       return price;
    }

}
public class JavaDiscountCourse implements ICourse{

    public Double price;

    @Override
    public Double getPrice() {
       return price*0.68;
    }
  
}

2、依赖倒置原则

概念

依赖倒置原则(DIP)是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并且能够降低修改程序所造成的风险。

使用

依赖倒置原则一般在框架,容器中使用较多。像之前我们启动运行代码,是在main函数中,而现在则由tomcat去运行。

代码

一个Tom类

public class Tom {
    
    public void studyJavaCourse(){
        System.out.println("Tom正在学习Java课程");
    }
    
    public void studyPythonCourse(){
        System.out.println("Tom正在学习Python课程");
    }
    
}

它的调用

public static void main(String[] args) {
        Tom tom = new Tom();
        tom.studyJavaCourse();
        tom.studyPythonCourse();
}

依赖倒置而是依赖与抽象

public interface ICourse {
    
    void study();
    
}
public class JavaCourse implements ICourse{

    @Override
    public void study() {
        System.out.println("Tom在学习Java课程");
    }

}
public class PythonCourse implements ICourse{

    @Override
    public void study() {
        System.out.println("Tom正在学习Python课程");
    }

}
public class Tom {

    public void study(ICourse course) {
        course.study();
    }

}
public static void main(String[] args) {
        Tom tom = new Tom();
        tom.study(new JavaCourse());
        tom.study(new PythonCourse());
 }

这样子,无论Tom要学习什么课程,都不会改修原来的Tom类,而只需要新增类就行了。通过传参的方式告诉Tom,这就是依赖注入。

注入的方式还有构造器方式和Setter方式。(例子就不举了,其实就是将具体的课程实现类通过构造方法或者setCourse方法注入到Tom类中)

3、单一职责原则

概念

单一职责是指不要存在多于一个导致类变更的原因。总体来说,就是一个类、接口或方法只负责一项职责。

4、接口隔离原则

概念

接口隔离原则是指用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口。

举例

例如一个动物的接口,有吃、飞、游泳等方法,如果用鸟、鱼去实现这个接口,是不正确的,那么我们应该创建三个接口,分别是吃,飞,游泳,然后再用鸟去实现吃,飞的接口,鱼去实现吃,游泳的接口。

5、迪米特原则

概念

迪米特原则是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则,尽量降低类与类之间的耦合度。

理解

尽量减少类与类之间的依赖关系,能不依赖就不依赖。

6、里氏替换原则

理解

一个软件实体如果适用于一个父类,那么一定适用于其子类,所有引用父类的地方必须能够透明地使用其子类的对象,子类对象能够替换父类对象,而程序逻辑不变。

子类可以扩展父类的功能,但不能改变父类的功能

解决方案:当使用继承时,遵循里氏替换原则。类B继承类A时,除添加新的方法完成新增功能P2外,尽量不要重写父类A的方法,也尽量不要重载父类A的方法。

7、合成复用原则

概念

合成复用原则是指尽量使用对象组合/聚合而不是继承关系达到软件复用的目的。可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少。

8、设计原则总结

学习设计原则是学习设计模式的基础。在实际开发过程中,并不要求所有代码都遵循设计原则,我们要考虑人力、时间、成本、质量,不能可以追求完美,但要在适当的场景遵循设计原则,这体现的是一种平衡取舍,可以帮助我们设计出更加优雅的代码结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值