作业2:软件设计原则, 设计模式

这个作业属于哪个课程2022软件代码开发技术
这个作业要求在哪里 读书笔记——软件设计原则、设计模式
这个作业的目标 学习软件设计原则和设计模式并做读书笔记

参考书籍

《设计模式—可复用面向对象软件的基础》

 

读书笔记

一、软件设计原则

1、开闭原则

开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节。可以提高软件系统的可复用性及可维护性。开闭原则,是面向对象设计中最基础的设计原则。

2、依赖倒置原则

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

3、单一职责原则

单一职责(Simple Responsibility Pinciple,SRP)是指不要存在多于一个导致类变更的原因。

4、接口隔离原则

接口隔离原则(Interface Segregation Principle, ISP)是指用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口。这个原则指导我们在设计接口时应当注意一下几点: 1、一个类对一类的依赖应该建立在最小的接口之上。 2、建立单一接口,不要建立庞大臃肿的接口。 3、尽量细化接口,接口中的方法尽量少(不是越少越好,一定要适度)。 接口隔离原则符合我们常说的高内聚低耦合的设计思想,从而使得类具有很好的可读性、可扩展性和可维护性。

5、迪米特法则

迪米特原则(Law of Demeter LoD)是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则(Least Knowledge Principle,LKP),尽量降低类与类之间的耦合。

 

二、软件设计模式(仅介绍自己常用的)

1,工厂方法模式(Factory Method Pattern)的用意是定义一个创建产品对象的工厂接口, 将实际创建工作推迟到子类中。

2,抽象工厂模式(Abstract Factory Pattern)的意图是提供一个创建一系列相关或者相互依 赖的接口,而无需指定它们具体的类。

3,建造者模式(Builder Pattern)的意图是将一个复杂的构建与其表示相分离,使得同样的 构建过程可以创建不同的表示。

4,原型模式(Prototype Pattern)是用原型实例指定创建对象的种类,并且通过拷贝这些原 型创建新的对象。

5,单例模式(Singleton Pattern)是保证一个类仅有一个实例,并提供一个访问它的全局访 问点。

6,适配器模式(Adapter Pattern)是将一个类的接口转换成客户希望的另外一个接口。使得 原本由于接口不兼容而不能一起工作的那些类可以一起工作。

7,外观模式(Facade Pattern)是为子系统中的一组接口提供一个一致的界面,此模式定义 了一个高层接口,这个接口使得这一子系统更加容易使用。

8,命令模式(Command Pattern)是将一个请求封装为一个对象,从而使你可用不同的请 求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

9,观察者模式(Observer Pattern)定义对象间的一种一对多的依赖关系,当一个对象的状 态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

10、状态模式(State Pattern)就是对象的行为,依赖于它所处的状态。

 

三、心得体会

之前使用过使用局部静态变量的方式来创建懒汉式单例

#include <iostream>

class Singleton
{
public:
    ~Singleton(){
        std::cout<<"destructor called!"<<std::endl;
    }
    Singleton(const Singleton&)=delete;
    Singleton& operator=(const Singleton&)=delete;
    static Singleton& get_instance(){
        static Singleton instance;
        return instance;

    }
private:
    Singleton(){
        std::cout<<"constructor called!"<<std::endl;
    }
};

int main(int argc, char *argv[])
{
    Singleton& instance_1 = Singleton::get_instance();
    Singleton& instance_2 = Singleton::get_instance();
    return 0;
}

posted @ 2022-03-07 14:56  hshjj  阅读(73)  评论(0)    收藏  举报