)
创建型 结构型设计模式汇总一、创建型模式负责对象创建隔离对象实例化1. 简单工厂不属于GOF23核心定义一个工具类通过条件判断静态生成不同对象把new封装到静态方法。经典用例静态工具类生产不同数据库连接。应用场景对象种类不多简单工具封装缺点新增产品要改代码违反开闭原则。2. 工厂方法 Factory Method核心定义定义工厂抽象接口一个工厂只生产一类产品每个产品对应一个具体工厂。经典用例PhoneFactoryIPhoneFactory生成iPhoneMiPhoneFactory生成MiPhone。应用场景产品单一产品需要频繁扩展新增产品只需要新增产品类工厂类符合开闭原则。3. 抽象工厂 Abstract Factory核心定义工厂接口包含多个创建方法产出一整套配套的产品族保证组件之间兼容配套。经典用例苹果工厂产出苹果手机苹果耳机小米工厂产出小米手机小米耳机。应用场景需要多组互相依赖、配套的组件UI组件套件数据库整套组件。缺点新增产品等级会修改抽象工厂接口破坏开闭。4. 建造者生成器Builder核心定义复杂对象分步拼装构建过程与表示分离同一套组装流程可以生成不同对象。经典用例组装电脑CPU、显卡、内存Java链式Builderlombok Builder简化版。应用场景对象属性繁多大量可选参数构造器参数爆炸对象创建步骤固定零件可变。5. 原型 Prototype核心定义通过克隆已有对象创建新对象而不是new。分为浅克隆、深克隆。经典用例JavaCloneable配置对象复制。应用场景对象创建成本很高大量相似对象。二、结构型模式组装类与对象处理类之间的组合关系共7种1. 适配器 Adapter核心定义转换已有类的接口解决接口不兼容让不能协作的类可以一起工作。分为对象适配器组合推荐、类适配器继承。经典用例电源转换插头适配第三方SDK老接口。应用场景复用已有类但接口不符合项目要求整合遗留系统、第三方组件。2. 桥接 Bridge核心定义抽象与实现分离组合代替继承处理多个独立变化的维度两个维度可以各自扩展。经典用例画笔大/小画笔颜色红/蓝JDBC驱动。应用场景类存在2个及以上独立变化维度继承会造成类爆炸。3. 组合 Composite核心定义构建树形「整体‑部分」结构统一处理叶子节点单个对象和容器节点集合。分透明模式、安全模式。经典用例文件目录文件‑文件夹组织架构菜单树。应用场景需要表达整体‑部分树形层级客户端希望不用区分单个对象和容器。4. 装饰器 Decorator核心定义不改变接口动态给对象叠加职责支持多层嵌套包装用组合替代继承。经典用例Java IO流BufferedInputStream咖啡加配料。应用场景需要动态增删对象功能继承会产生大量子类。5. 外观 Facade门面核心定义给复杂的多个子系统提供一个高层简单入口封装编排多步调用隐藏内部复杂度不修改原有接口。经典用例家庭影院一键观影模块对外层封装。应用场景子系统内部逻辑复杂分层架构层与层之间老系统封装对外接口。6. 代理 Proxy核心定义为目标对象提供代理对象控制对真实对象的访问接口保持不变。分为静态代理、JDK动态代理、CGLIB还有虚拟代理、保护代理、远程代理。经典用例SpringAOP图片延迟加载权限校验。应用场景对象创建开销大、需要权限校验、远程访问、方法前后附加日志统计。7. 享元 Flyweight核心定义共享大量细粒度对象把对象分为内部状态可共享、外部状态外部传入不可共享减少内存占用。经典用例字符串池字体字符对象。应用场景系统中存在大量重复细粒度对象内存开销大。易混模式一句话区分面试速记工厂方法单个产品每个产品一个工厂抽象工厂一整套配套产品族建造者分步拼装复杂对象构建与表示分离适配器转换接口解决不兼容事后兼容桥接拆分多变化维度抽象实现分离设计阶段组合树结构叶子与容器统一处理装饰器同接口多层动态叠加功能外观封装多个子系统对外简单入口代理同接口控制对象访问享元共享对象节约内存补充关键区分代理vs装饰器代理重在访问控制装饰器重在叠加新功能。适配器vs桥接适配器是事后做接口兼容桥接是设计阶段拆分两个变化维度。外观vs适配器外观封装多个子系统做调用编排适配器是一对一接口转换。