简介
客户端可以通过目标类的接口访问它所提供的服务。有时,现有的类可以满足客户类的功能需要,但是它所提供的接口不一定是客户类所期望的,这可能是因为现有类中方法名与目标类中定义的方法名不一致等原因所导致的。
在这种情况下,现有的接口需要转化为客户类期望的接口,这样保证了对现有类的重用。
- 两种适配器模式:
类适配器: 把适配的类的API转换成为目标类的API,使用继承连接到适配类
对象适配器: 也是把适配的类的API转换成为目标类的API,使用委派关系连接到适配类
客户端可以通过目标类的接口访问它所提供的服务。有时,现有的类可以满足客户类的功能需要,但是它所提供的接口不一定是客户类所期望的,这可能是因为现有类中方法名与目标类中定义的方法名不一致等原因所导致的。
在这种情况下,现有的接口需要转化为客户类期望的接口,这样保证了对现有类的重用。
类适配器: 把适配的类的API转换成为目标类的API,使用继承连接到适配类
对象适配器: 也是把适配的类的API转换成为目标类的API,使用委派关系连接到适配类
策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以灵活地替换.(不修改原代码)
使用算法的角色,它在解决某个问题(即实现某个方法)时可以采用多种策略。在环境类中维持一个对抽象策略类的引用实例,用于定义所采用的策略,在运行时调用具体策略类中的方法.
模板方法基于继承的代码复用,是一种类行为型模式
某些业务的实现需要多个流程,有些步骤是固定的,而有些是存在可变性的.(即: 步骤次序固定,存在公共代码)
为了提高代码复用性和系统灵活性,可以将相同的步骤实现代码放在父类中,而对于存在可变性的方法,就只在父类中做一个声明,具体实现等待子类来完成,不同的子类可以有不同的实现方式.
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建。
当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、更有效率。
可以说,抽象工厂模式是工厂方法模式复杂情况下的改进方案.
属于创建类型模式
简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类or接口.
Factory(工厂角色):
负责创建实例,提供静态工厂方法,返回抽象产品类型.
由于简单工厂模式中静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背“开闭原则”,所以引入工厂方法模式实现增加新产品而不影响已有代码
在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
不要存在多于一个导致类变更的原因(一个类只负责一项职责)
(要在类的职责扩散到无法控制之前,立即重构)
定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。
引用计数法:
给对象添加一个引用计数器,每一个地方引用它时计数器加1;引用失效时计数器减1.为值为0的对象不可能再被使用.
缺点:
难以解决对象之间循环引用的问题(对象A引用对象B,对象B引用对象A,两个对象无实际意义)
可达性分析算法:
通过一些称为”GC_ROOTS”的对象作为起点,开始向下搜索引用它的对象,这个过程走过的路径即”引用链”.当一个对象到”GC_ROOTS”没有任何引用链相连,证明此对象不存活.
类从加载到虚拟机内存~卸载出内存的生命周期(这些阶段通常是交叉混合进行的):
加载 –> 验证 –> 准备 –> 解析 –> 初始化 –> 使用 –> 卸载
主动引用
五种必须立即对类进行初始化
的情况: