读书笔记----软件设计原则、设计模式

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology/homework/11833
这个作业的目标 阅读设计模式、设计原则有关的书籍,结合一些图、表工具,用自己的语言对书的主要内容进行归纳总结。结合自己曾经的软件开发实践,思考用到了哪些原则或模式,谈谈读书的心得体会。

1、参考资料

朱洪军《软件设计模式》:http://e.dangdang.com/pc/reader/index.html?id=1901113340

2、阅读笔记

2.1、设计原则

程序设计原则是指导开发人员设计出高质量软件代码的规范与建议,是经过无数次实践项目检验后的技术经验总结或抽象。

2.2、面向对象设计原则

原则 简介
开闭原则 一个软件实体应该对扩展开放,对修改关闭。强调的是用抽象构建框架,用实现扩展细节。以提高软件系统的可复用性及可维护性帮助我们实现稳定灵活的系统架构。
里氏替换原则 不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义
依赖倒置原则 高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节;细节应该依赖抽象。针对接口编程,不要针对实现编程。通过抽象包括使用接口或者抽象类,可以使个各类或者模块的实现彼此独立,互不影响,从而实现模块间的耦合性。简单来说就是程序应该依赖于接口而不是实现类。
单一职责原则 不要存在多于一个导致类变更的原因,一个类只干一件事,实现类要单一。
接口隔离原则 尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。
迪米特法则 一个对象应当对其他对象有尽可能少的了解。也就是说,一个模块或对象应尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立,这样当一个模块修改时,影响的模块就会越少,扩展起来更加容易。
合成复用原则 尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的。

2.2、设计模式

软件设计模式,又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。
设计模式是对面向对象设计中反复出现的问题的解决方案。

2.2.1、设计模式的分类

模式类型 模式分类
创建型模式 单例模式、工厂方法、抽象工厂方法、建造模式、原型模式
结构型模式 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
行为型模式 模板方法、命令模式、迭代器模式、观察者模式、中介者模式、状态模式、策略模式、责任链模式、访问者模式、备忘录模式、解释器模式

2.2.2、里氏替换原则

里氏替换原则的定义:里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。

里氏替换原则包含的含义:
1.子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法
2.子类中可以增加自己特有的方法
3.当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松

代码实例:
定义一个三角形类(只有get()方法没有set()方法)

public abstract class triangle {
	
    protected abstract long getEdge1();
    protected abstract long getEdge2();
    protected abstract long getEdge3();
}

定义一个一般三角形类

public class OTriangle extends triangle {

    private long edge1;
    private long edge2;
    private long edge3;

    public void setEdge1(long edge) {
        this.edge1 = edge;
    }

    public long getEdge1() {
        return this.edge1;
    }
    
    public void setEdge2(long edge) {
        this.edge2 = edge;
    }

    public long getEdge2() {
        return this.edge2;
    }
    
    public void setEdge3(long edge) {
        this.edge3 = edge;
    }

    public long getEdge3() {
        return this.edge3;
    }
    
}

定义一个等边三角形类(三条边赋相同值)

public class OTriangle extends triangle {

    private long edge1;
    private long edge2;
    private long edge3;

    public void setEdge1(long edge) {
        this.edge1 = edge;
    }

    public long getEdge1() {
        return this.edge1;
    }
    
    public void setEdge2(long edge) {
        this.edge2 = edge;
    }

    public long getEdge2() {
        return this.edge2;
    }
    
    public void setEdge3(long edge) {
        this.edge3 = edge;
    }

    public long getEdge3() {
        return this.edge3;
    }
}

类的继承关系:

根据里氏替换原则的定义,子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法,所以等边三角形不应该继承一般三角形,而是应该将它们共有的相同的方法放到一个基类上,再令等边三角形和一般三角形继承自基类。

3、心得体会

软件设计原则学起来不难,但要应用到软件开发中是有一定难度的。

4、后台博文编辑

posted @ 2021-03-16 18:48  qintc  阅读(99)  评论(0)    收藏  举报