什么是开闭原则?
闭原则,在面向对象编程领域中,规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。
梅耶开闭原则
梅耶的定义提倡实现继承。具体实现可以通过继承方式来重用,但是接口规格不必如此。已存在的实现对于修改是封闭的,但是新的实现不必实现原有的接口。
多态开闭原则
导对抽象的继承。接口规约可以通过继承来重用,但是实现不必重用。已存在的接口对于修改是封闭的,并且新的实现必须,至少,实现那个接口。
单例模式
懒汉式 线程安全、double check 加锁优化(双重检查)、
jit(编译器)、cpu有可能回对指令重新排序、导致使用未初始化实例、可以通过volatile(wo tai ao)进行修饰,可以防止指令重排
饿汉式
类加载 初始化完成 jvm类加载机制,保证实例唯一性;
加载二进制数据到内存,生成class数据结构
验证、类静态变量赋默认值
使用类的时候,触发初始化
静态内部类
利用类加载保证线程安全
实际使用,触发类的初始化,懒汉式
工厂模式
开闭原则 创建者与产品解耦 单一职责原则
抽象工厂模式
一些列工厂组成抽工厂模式
不同系列产品,可以使用抽象工厂
产品兼容、产品客户端代码非紧密耦合、开闭原则、 单一职责原则
建造器模式
生成对象负责内部结构
独立、易扩展、克控制细节风险
原型模式
不耦合具体类下克隆对象 、避免重复初始化代码、方便构建复杂对象
享元模式
共享资源 不可变对象 intger string Long 属于享元模式
门面模式
调用复杂业务时使用 优化客户端调用、经典应用 httprequestFacade
适配器模式
类适配器 继承
对象适配器 组合形式
使用现有类、与自身代码不兼容 使用适配器 典型例子:电压转换
符合单一原则 开闭原则
装饰者模式
在不改变原有对象基础上,将功能赋值到对象上;
扩展一个类的功能或者给类附加职责
不修改原有对象给下一个对象扩展功能、灵活组合相对的业务的功能,符合开闭原则
策略模式
定义算法组、分别封装起来,可以互相转换;此模式的变化独立于算法使用者
模板模式
定义操作算法框架、将步骤延迟到子类中,使得子类可以重定义算法中某些步骤
观察者模式
定义对象 1对多的依赖,让多个观察者监听某一个主题对象,当对象发送变化时,依赖者收到通知进行业务变更
符合开闭原则、运行时建立对象之间的关系