Java 软件构造Software construction (三)

相关课程

可复用性

四个层次上的可复用性

代码层次,模块层次:类/接口,库层次:API/包,系统层次:框架

LSP原则Liskov Substitution Principle

子类型多态:客户端可用统一的方式处理不同类型的对象
Same or stronger invariants 更强的不变量
Same or weaker preconditions 更弱的前置条件
Same or stronger postconditions更强的后置条件
所以子类型方法参数为逆变,子类型返回值为协变,异常类型为协变
协变即为越来越具体,逆变即为越来越抽象

委派delegation

委派:一个对象请求另一个对象的功能
委派模式:通过运行时动态绑定,实现对其他类中代码的动态复用
当子类只需要复用父类的一部分方法时,就可以不需要使用继承,而用委派机制来实现,同时一个类不需要继承另一个类的全部方法,就通过委派机制调用部分方法。
委派的三种类型是,Use,Association,Composition/aggregation

可维护性

5个设计原则SOLID

SRP:单一责任原则 OCP:开放-封闭原则 LSP:Liskov替换原则 DIP:依赖转置原则 ISP:接口聚合原则

SRP

不应该有多于1个原因让你的ADT发生变化,否则就拆分开

OCP

模块的行为可扩展,模块的代码不应该修改,解决方案:抽象技术

ISP

不能强迫客户端依赖于他们不需要接口,只提供必要接口

DIP

抽象的模块不应依赖于具体的模块

面向可维护性和可复用性的设计模式

创建型模式

工厂方法模式:当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。

Structural patterns

适配器模式:通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。
装饰器模式:当特性需要组合时,对每一个特性构造子类,通过委派机制增加到对象上,就像穿一层又一层的衣服

Behavioral patterns

策略模式:有多种不同的算法来实现同一个任务,但需要client根据需要动态切换算法,而不是写死在代码里
模板模式:做事情的步骤一样,但具体方法不同,共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现。使用继承和重写实现模板模式。
迭代器模式:客户端希望遍历被放入容器/集合类的一组ADT对象,无需关心容器的具体类型
visitor模式:对特定类型的object的特定操作(visit),在运行时将二者动态绑定到一起,该操作可以灵活更改,无需更改被visit的类。为ADT预留一个将来可扩展功能的“接入点”,外部实现的功能代码可以在不改变ADT本身的情况下通过delegation接入ADT。

第三次实验

关于github

github在一开始的时候抽风了QAQ,所以一直没有创建仓库,等github好了的时候再创建仓库pull的时候发现
在这里插入图片描述
查询后发现出现这个问题是因为本地仓库和远程仓库变成独立两个仓库了(一开始没有clone仓库)
pull命令后紧接着使用–allow-unrelated-history选项来解决问题。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/eliforsharon/article/details/118293443