八股知识整理——设计模式
绪论
-
什么是设计模式:程序设计的方法论
-
为什么参考设计模式:让面向对象编程的程序保持程序结构良好
-
面向对象设计 5 大基本原则
-
单一职责原则:单一模块只负责单一功能
-
开放封闭原则:封闭内部功能,开放功能扩展
-
里氏替换原则:子类应当具备替换父类的能力
-
依赖倒置原则:如果底层模块需要应用顶层模块的功能,需要先将顶层模块的功能抽象为底层方法,再进行调用
-
接口分离原则:模块间通过抽象接口类进行隔离
-
构建型模式
基本概念
-
什么是构建型模式:控制对象生命周期的设计模式
-
为什么需要构建型模式:避免硬编码,增强代码的可维护性与可扩展性
工厂模式
-
什么是工厂模式:将类的创建过程封装到工厂类中
-
怎么实现工厂模式:
-
每一个类都对应一个工厂类负责创建过程管理
-
调用者使用公共的工厂接口调用工厂类
-
-
为什么使用工厂模式:
-
单一职责原则:创建对象由工厂类负责,修改创建过程不需要更改创建者的代码
-
开闭原则: 相比于把所有类的创建过程放在一个类中统一管理,工厂方法模式在进行类的扩展时更加符合开闭原则。
-
接口分离原则:使用接口有利于工厂的横向扩展
-
-
Java实现工厂方法模式
//工厂接口
public interface IFactory {
Fruit create();
}
// 构造工厂
public class AppleFactory implements IFactory {
@Override
public Fruit create(){
return new Apple();
}
}
public class PearFactory implements Ifactory {
public Fruit create(){
return new Pear();
}
}
// 调用工厂
public class User {
private void eat(){
IFactory appleFactory = new AppleFactory();
Fruit apple = appleFactory.create();
IFactory pearFactory = new PearFactory();
Fruit pear = pearFactory.create();
apple.eat();
pear.eat();
}
}
单例模式
-
什么是单例模式:全局只能存在一个实例对象的类
-
为什么需要单例模式:
-
避免重复创建:某些特殊场景要求只能存在一个对象(ID生成器)
-
减少内存开销:某些类的创建需要消耗大量资源,同时该类没有高并发需求
-
-
怎么实现单例模式:
-
饿汉式单例模式:在全局静态域初始化单例
-
懒汉式单例模式:在需要单例时再创建该单例
-
Java实现饿汉式单例
public class Singleton {
// 在全局静态域初始化该单例
private static Singleton instance = new Singleton();
// 该单例无法被其它对象实例化
private Singleton() {
}
// 封装调用方法
public static Singleton getInstance() {
return instance;
}
}
Java实现懒汉式单例
public class Singleton {
// 在全局静态域初预留该实例的位置,但是不初始化
private static Singleton instance = null;
// 该单例无法被其它对象实例化
private Singleton() {
}
// 调用时如果没初始化则进行初始化,否则返回实例
public static Singleton getInstance() {
// 使用双检锁的方式初始化实例,保障线程安全
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
-
双检锁
-
为什么synchronized写在if里面:因为只有创建的时候会进入if,如果锁住了if会使得创建后每次if都上锁,效率低
-
为什么synchronized里面又有一个if:防止两个线程同时创建
-
结构型模式
基本概念
-
什么是结构型模式:控制对象之间关系的设计模式
-
为什么需要结构型模式:简化系统设计,提高代码的复用性
代理模式
-
什么是代理模式:给某对象提供一个代理以控制该对象的访问
-
为什么需要代理模式:
-
单一职责原则,对象的控制(日志,调度)是独立于对象功能本身
-
-
代理模式的应用:
-
远程代理
-
适配器模式
-
什么是适配器模式:对于两个需要进行耦合的对象使用适配器进行包装+转换
-
为什么需要适配器模式:
-
单一职责原则,两个需要耦合的功能类不需要负责类的衔接功能。如果两个需要耦合的类接口不匹配,可以创建适配器类实现两个类的接口的转换。
-
行为型模式
基本概念
-
什么是行为型模式:控制对象之间责任划分的设计模式
-
为什么需要行为型模式:简化系统的控制流
责任链模式
-
什么是责任链模式:对于多个承担相同任务,但是服务范围不同的子类,当存在需要处理的业务时,发送业务方不使用if判断语句遍历适配子类,而是将事务按照子类的服务范围的顺序,依次流过每一个子类,形成责任链,使得适配的子类自己进行处理。
-
为什么需要责任链模式:
-
发送方不适用if判断语句,可以将发送方与处理方进行解耦
-
简化处理逻辑,剔除了"任务分配者"的角色
-
符合开闭原则,子类的扩展不需要修改其他类的代码
-
观察者模式
-
什么是观察者模式:对于需要被监听的对象,维护一个观察者表,每当该被观察对象有变化,则调用方法向观察者表内的对象发送消息。
-
为什么需要观察者模式:响应式编程的业务需求
模板方法模式
-
什么是模板方法模式:将方法的框架写在父类中,框架的实现细节使用子类实现
更多推荐


所有评论(0)