拓冰建站拓冰建站
首页 / 资讯中心 / 正文

23 种设计模式(GoF)代码示例说明

本项目在com.example.design包下实现了 GoF 经典 23 种设计模式每个模式一个独立包每个包内含一个可独立运行的XxxDemo.java带main方法代码中均有详细注释。运行方式直接在 IDEA 中运行任意 Demo 类的main方法即可。设计模式的六大原则是什么 答 单一职责 开闭原则最重要 里氏替换 依赖倒置 接口隔离 迪米特法则目录一、创建型模式5 种1. 单例模式Singleton2. 工厂方法模式Factory Method3. 抽象工厂模式Abstract Factory4. 建造者模式Builder5. 原型模式Prototype二、结构型模式7 种6. 适配器模式Adapter7. 桥接模式Bridge8. 组合模式Composite9. 装饰器模式Decorator10. 外观模式Facade11. 享元模式Flyweight12. 代理模式Proxy三、行为型模式11 种13. 责任链模式Chain of Responsibility14. 命令模式Command15. 解释器模式Interpreter16. 迭代器模式Iterator17. 中介者模式Mediator18. 备忘录模式Memento19. 观察者模式Observer20. 状态模式State21. 策略模式Strategy22. 模板方法模式Template Method23. 访问者模式Visitor模式选择速查代码说明一、创建型模式5 种—— 关注对象怎么创建1. 单例模式Singletonsingleton定义保证一个类仅有一个实例并提供一个访问它的全局访问点。示例实现静态内部类懒加载 线程安全、双重检查锁DCL、枚举推荐防反射/序列化破坏。使用场景配置中心、连接池、线程池、缓存、Spring 容器的默认 Bean 作用域。2. 工厂方法模式Factory Methodfactorymethod定义定义一个创建对象的接口让子类决定实例化哪一个类将实例化延迟到子类。示例实现文档导出器CSV / PDF 工厂各自生产对应导出器。使用场景日志框架LoggerFactory、Spring 的 FactoryBean、支付渠道扩展。新增产品只需新增工厂符合开闭原则。3. 抽象工厂模式Abstract Factoryabstractfactory定义提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。与工厂方法的区别工厂方法生产一种产品抽象工厂生产一族产品。示例实现跨平台 UI 库Windows / Mac 工厂分别生产整套风格组件。使用场景跨平台 UI、数据库方言切换、多云厂商 SDK 适配。4. 建造者模式Builderbuilder定义将复杂对象的构建与表示分离同样的构建过程可创建不同表示。示例实现组装电脑必选参数走构造器、可选参数链式设置产出不可变对象。使用场景参数多且有可选项的对象创建LombokBuilder、StringBuilder、OkHttp 的 Request.Builder。5. 原型模式Prototypeprototype定义用原型实例指定创建对象的种类通过拷贝原型创建新对象。示例实现报表模板克隆演示深拷贝与浅拷贝的区别。使用场景对象初始化成本高查库/读文件且需大量相似对象时Java 的Cloneable、Spring 的 prototype 作用域。二、结构型模式7 种—— 关注类与对象怎么组合6. 适配器模式Adapteradapter定义将一个类的接口转换成客户希望的另一个接口使原本不兼容的接口可以一起工作。示例实现新版日志接口通过适配器兼容老系统的日志调用。使用场景整合第三方 SDK、老系统改造SLF4J 桥接各日志实现、Spring MVC 的 HandlerAdapter。7. 桥接模式Bridgebridge定义将抽象部分与实现部分分离使它们都可以独立变化。示例实现消息类型普通/加急× 发送渠道短信/邮件两个维度独立扩展避免类爆炸M×N → MN。使用场景多维度正交变化的场景JDBC DriverManager、JVM 跨平台实现。8. 组合模式Compositecomposite定义将对象组合成树形结构表示部分-整体层次使单个对象和组合对象的使用具有一致性。示例实现公司组织架构部门可嵌套部门/员工统一接口计算人力成本。使用场景文件系统、菜单树、UI 控件树、组织架构。9. 装饰器模式Decoratordecorator定义动态地给对象添加额外职责比生成子类更灵活。示例实现咖啡订单动态叠加牛奶、糖、奶油等配料像套娃逐层包装。使用场景Java IO 体系BufferedInputStream包装FileInputStream、HttpServletRequestWrapper、缓存/日志增强。10. 外观模式Facadefacade定义为子系统中的一组接口提供统一的高层接口使子系统更易使用。示例实现一键下单外观类封装库存、支付、物流、通知四个子系统的协作。使用场景微服务网关、Service 门面层、SLF4J 日志门面降低客户端与子系统的耦合。11. 享元模式Flyweightflyweight定义运用共享技术有效支持大量细粒度对象。示例实现棋子对象共享颜色内部状态坐标由客户端传入外部状态享元池复用对象。使用场景字符串常量池、Integer缓存-128~127、线程池、大量相似对象的内存优化。12. 代理模式Proxyproxy定义为其他对象提供一种代理以控制对这个对象的访问。示例实现房屋中介代理卖房同时演示静态代理与 JDK 动态代理InvocationHandler。使用场景Spring AOP、MyBatis Mapper 代理、RPC 远程代理、懒加载虚拟代理、权限保护代理。三、行为型模式11 种—— 关注对象之间怎么交互与分工13. 责任链模式Chain of Responsibilitychainofresponsibility定义多个对象连成一条链请求沿链传递直到被处理发送者与接收者解耦。示例实现报销审批链主管(≤1000) → 经理(≤10000) → CEO。使用场景Servlet Filter 链、Spring Security 过滤器链、审批流、异常处理链。14. 命令模式Commandcommand定义将请求封装为对象支持请求参数化、排队、日志记录与撤销。示例实现遥控器控制电灯命令栈支持 undo。使用场景编辑器撤销/重做、任务队列Runnable即命令、事务回滚、宏命令。15. 解释器模式Interpreterinterpreter定义定义语言的文法表示并定义解释器来解释语言中的句子。示例实现逆波兰后缀表达式解析与计算构造抽象语法树AST。使用场景SQL 解析、正则、规则引擎、SpEL。复杂语法建议用 ANTLR 而非手写。16. 迭代器模式Iteratoriterator定义顺序访问聚合对象的元素而不暴露其内部表示。示例实现自定义书架实现Iterable/Iterator支持 for-each。使用场景Java 集合框架、数据库结果集遍历、自定义容器的统一遍历。17. 中介者模式Mediatormediator定义用中介对象封装一系列对象交互使各对象不必显式相互引用N:N → N:1:N。示例实现聊天室转发用户消息用户之间互不感知。使用场景聊天室、塔台调度、GUI 组件协作、MQ 消息总线。18. 备忘录模式Mementomemento定义不破坏封装性的前提下捕获并保存对象内部状态以便之后恢复。示例实现游戏角色存档/读档备忘录对外屏蔽内部状态。使用场景编辑器撤销、游戏存档、数据库快照与事务回滚。19. 观察者模式Observerobserver定义定义对象间一对多依赖一个对象状态改变时所有依赖者自动收到通知。示例实现公众号发布文章订阅者自动收到推送。使用场景GUI 事件、SpringApplicationEvent、消息订阅、MVVM 数据绑定。20. 状态模式Statestate定义允许对象在内部状态改变时改变它的行为对象看起来修改了它的类。示例实现自动售货机无币/有币状态状态对象自己驱动状态转换。使用场景订单状态机、工作流引擎、TCP 连接状态消除大量状态判断 if-else。与策略模式的区别状态转换由状态内部驱动相互感知策略由客户端选择互不知晓。21. 策略模式Strategystrategy定义定义一系列算法并封装使它们可互相替换算法变化独立于使用它的客户。示例实现购物车结算动态切换支付宝/微信/银行卡支付策略。使用场景Comparator、支付方式、路由/负载均衡策略消除 if-else符合开闭原则。22. 模板方法模式Template Methodtemplatemethod定义定义算法骨架把某些步骤延迟到子类实现子类不改变算法结构即可重定义特定步骤。示例实现数据导入流程骨架固定读取→校验→入库CSV/Excel 各自实现差异化步骤含钩子方法。使用场景JdbcTemplate、RestTemplate、Servletservice()、AQS。23. 访问者模式Visitorvisitor定义在不改变元素类的前提下定义作用于这些元素的新操作双重分派。示例实现对工程师/经理分别实现年终奖计算与 KPI 报表两个访问者。使用场景元素类型稳定但操作经常新增的场景编译器 AST、注解处理器ElementVisitor、报表导出。模式选择速查痛点考虑的模式全局唯一实例单例创建逻辑复杂/参数多工厂方法、抽象工厂、建造者创建成本高的相似对象原型接口不兼容适配器多维度独立扩展桥接树形结构统一处理组合动态增强功能装饰器、代理简化复杂子系统调用外观大量细粒度对象耗内存享元多级审批/过滤责任链撤销/重做、任务队列命令自定义 DSL/表达式解释器屏蔽集合内部结构遍历迭代器多对象网状耦合中介者状态保存与恢复备忘录状态变更广播通知观察者行为随状态变化状态算法可互换、消 if-else策略流程固定、步骤可变模板方法元素稳定、操作常增访问者代码说明在 com.example.design 包下生成了 GoF 23 种设计模式的完整代码示例每个模式一个独立包代码带详细中文注释均可独立运行含 main 方法创建型5singleton饿汉/DCL/静态内部类/枚举四种实现、factorymethod、abstractfactory、builder、prototype结构型7adapter、bridge、composite、decorator、facade、flyweight、proxy静态代理 JDK 动态代理行为型11chainofresponsibility、command、interpreter、iterator、mediator、memento、observer、state、strategy、templatemethod、visitor
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门