软件构造复习笔记

建议复习看课件,软件构造的课件比算法和自动机的课件好一亿倍。

1.重写使用哪个方法在运行时决定,重载在编译时决定。

2.观察等价性与行为等价性
软件构造复习笔记_第1张图片
对可变类型实现观察等价性,因为怕行为等价性改变可变类型对象的值
软件构造复习笔记_第2张图片
软件构造复习笔记_第3张图片
软件构造复习笔记_第4张图片
软件构造复习笔记_第5张图片

3.Java命名规范:
软件构造复习笔记_第6张图片

4.白盒复用和黑盒复用:
软件构造复习笔记_第7张图片

5.LSP下子类的设计原则:
软件构造复习笔记_第8张图片
协变:越来越具体的返回值类型和异常类型
软件构造复习笔记_第9张图片
逆变:越来越抽象的参数类型:
软件构造复习笔记_第10张图片

小知识点:泛型不是协变的:
软件构造复习笔记_第11张图片
通配符的使用:
软件构造复习笔记_第12张图片
软件构造复习笔记_第13张图片

白盒框架和黑盒框架:
软件构造复习笔记_第14张图片

设计模式

  1. Adapter适配器模式:将某个类,接口转化为client期望的那种模式,这个不难理解。软件构造复习笔记_第15张图片
  2. Decorator装饰器模式,这个在我们的lab3里面有所体现,就是给行星使用Decorator装饰器模式添加卫星。我的理解就是,比方说有一个类,现在我想给这个类加一些功能,rep包装一些,那么我就再建一个类,这个类里面有原来类的一个实例,再在这个新的类里面添加rep和功能。
  3. Facade外观模式:客户端需要通过一个简单的接口来访问习题内部的功能,比方说客户现在记不住System.out.println()方法,那么我就给建立一个out()方法,我的out()方法里面就是在调用System.out.println()方法,这样客户就可以通过调用out()方法,就不需要记住System.out.println().
  4. Strategy策略模式:这个在实验中也多次体会到了,要使用的背景:我们对于一个问题有些时候要使用不同的策略去处理,这个时候我们为了简化处理的途径,我们可以这样:(1)声明一个Strategy接口,里面是需要实现的策略。(2)写出实现Strategy接口的具体策略类。(3)在具体问题里面,通过实例化不同的具体策略类来完成对问题的解决。
  5. 问题背景:做事情的步骤一样,但是具体方法不同,实现:共性的操作在父类里面实现,具体的操作在子类里面实现。
  6. Iterator模式:这个很好理解,使写出来的类实现Iterable接口,使得我们可以对对象进行遍历软件构造复习笔记_第16张图片
    可维护性的常见度量指标:
    圈复杂度,代码行数

5个设计原则

软件构造复习笔记_第17张图片
SRP:单一责任原则:要求类的功能(责任)单一,一个类不能承担太多责任
OCP:一个软件实体如类,函数等应该对扩展开放,对修改关闭。
LSP:只要父类出现的地方,必须可以使用子类。
DIP:抽象的模块不应该依赖于具体的模块,具体应该依赖于抽象,要针对抽象(接口)编程,不要针对细节编程。
ISP:使用专门的接口比使用单一的总接口好,客户不应该依赖他们不需要的方法。

面向可维护性的设计模式

1.Factory Method pattern(工厂方法模式)
定义一个接口,根据实际需求从接口中派生子类使用。
.
.
2. Abstract Factory(抽象工厂模式)
提供接口以创建一组相关/相互依赖的对象, 但不需要指明其具体类。
这样的话,我可以通过使用不同的对象的实例化的组合来实现不同的功能,而不需要为每一个特定的背景开发一个具体的类。
客户得到零散的组件,然后自己组合
软件构造复习笔记_第18张图片
软件构造复习笔记_第19张图片
软件构造复习笔记_第20张图片
软件构造复习笔记_第21张图片
3.Builder(构造器模式)
我对构造器模式的理解:在抽象方法里面客户得到的是零散的组件,现在客户还是需要一个东西,它由特定的几个部分组成,但是客户不想得到零散的组件自己拼装,而是想得到整体的结果,那么就由我们先给他拼装好,客户想要什么我们就new一个拼装好的对象就可以。
软件构造复习笔记_第22张图片
软件构造复习笔记_第23张图片

4.Bridge模式(桥接模式):
一个类A的对象中有其他类B的对象作为其组成部分,但A的对 象具体绑定到B的哪个具体子类的实现?在运行时通过delegation加以组合, 并永久保存这种delegation关系。
软件构造复习笔记_第24张图片
软件构造复习笔记_第25张图片
软件构造复习笔记_第26张图片

5.proxy模式(代理模式):
某个对象比较“敏感”/“私密”/“贵重”,不希望被client直接访问 到,故设置proxy,在二者之间建立防火墙。软件构造复习笔记_第27张图片
软件构造复习笔记_第28张图片

6.Composite模式(组合模式):软件构造复习笔记_第29张图片
软件构造复习笔记_第30张图片
7. Observer(观察者模式)
软件构造复习笔记_第31张图片软件构造复习笔记_第32张图片软件构造复习笔记_第33张图片

今天不想看设计模式了,挖坑以后填:
Visitor
Mediator
Command
Chain of responsibility

内存分配

静态内存分配:在编译阶段就确定好了内存分配
基于堆和栈的内存分配都是动态内存分配
软件构造复习笔记_第34张图片

Java行能调优工具
软件构造复习笔记_第35张图片

面向代码调优的设计模式:
1.Singleton objects:
某些类再运行时只需要一个实例,所以强制client只能创建一个对象,避免new操作带来的时空性能损失。软件构造复习笔记_第36张图片

2 Flyweight Pattern轻量模式
软件构造复习笔记_第37张图片

3.Prototype Pattern原型模式
通过克隆而不是new来创建object,需要实现Cloneable接口
软件构造复习笔记_第38张图片
软件构造复习笔记_第39张图片

4.Object Pool Pattern对象池模式软件构造复习笔记_第40张图片Pool像一个图书馆,“书”就是可复用的object,可借可还
代价:原本可被GC的对象,现在要留在pool中,导致内存浪费——用空间换时间

字符串常量池:
避免使用new方法创建字符串
软件构造复习笔记_第41张图片

创建线程的方式:
1.继承Thread类,重写run方法
2.实现Runnable类,实现run方法。
3.
软件构造复习笔记_第42张图片
4。软件构造复习笔记_第43张图片

确保线程安全的几种方式
软件构造复习笔记_第44张图片

你可能感兴趣的:(软件构造复习笔记)