设计模式
文章平均质量分 81
LamaxiyaFc
天地分上下,日月照古今
展开
-
设计模式——Visitor(访问者)模式
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 Java实际应用举例——以ASM技术为例4.1 被访问对象——ClassReader4.2 Visitor——ClassVisitor4.3 具体visitor——ClassParser4.4 测试demo——AsmReadClassInfo5 总结参考文献前言当我们需要对一个对象中所有元素进行代码检查或者赋值检查等操作,或者想添加一些新的功能,但是当该对象对于产品已经很成熟,可能直接修改对象的类会产生新的缺陷。这时访问者可以帮助我们增添原创 2022-04-23 18:07:01 · 3326 阅读 · 0 评论 -
设计模式——Template Method(模板方法)
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 Spring应用举例4.1 AbstractClass——AbstractApplicationContext4.2 ConcreteClass——GenericWebApplicationContext5 总结参考文献前言当需要定义一个算法的框架,但是有些步骤,可能需要随着情景发生变化时,如果借助子类可能来封装可能产生大量子类重复代码。而模板方法可以帮助我们抽象公共逻辑,子类实现特定逻辑。1 定义Template Method(模板原创 2022-04-22 16:03:04 · 725 阅读 · 0 评论 -
设计模式——Strategy(策略)模式
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 实际应用举例4.1 Context——List列表和StuContext4.2 具体策略:ConcreteStrategyA和ConcreteStrategyB4.3 测试demo5 总结参考文献前言当我们对一个对象的某个操作,比如文本分析或者对象排序有多种算法,但是如果硬编码进它们的类中,将导致出现后续扩展困难,复杂度较高等。策略模式提出了一种方法解决这种情况。1 定义Strategy(策略)模式:定义一系列算法,并把它们独立封装到原创 2022-04-22 11:44:48 · 1273 阅读 · 0 评论 -
设计模式——State(状态)模式
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 应用举例4.1 State——TcpState4.2 Context——TcpConnection4.3 ConcreteState——ListeningTcpState、EstablishedTcpState和CloseTcpState4.3.1 ListeningTcpState4.3.2 EstablishedTcpState4.3.3 CloseTcpState4.4 测试5 总结参考文献前言考虑一个对象对于不同阶段,不同状态有不原创 2022-04-21 22:29:56 · 806 阅读 · 0 评论 -
设计模式——Observer(观察者)模式
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 应用举例4.1 Subject——Observable4.2 ConcreteSubject——ClockSubject4.3 Observer——Observer4.4 ConcreteObserver——ObserverOne、ObserverTwo4.5 测试程序——Client5 总结参考文献前言当一个对象与其它对象紧密关联,如果直接引用的话可能导致紧密耦合,如何描述这种一对多的关联关系?本文的观察者模式是一种思路。1 定义O原创 2022-04-21 17:10:09 · 2300 阅读 · 1 评论 -
设计模式——Memento(备忘录)模式
目录前言1 定义2 适用情况3 结构3.1 结构图3.2 参与者4 应用举例4.1 Memento和MementoCare4.2 Orginator——UrlEntity4.3 Client——ClientTest5 总结参考文献前言有时有必要记录一个对象的内部状态,以方便用户从错误中恢复过来。比如访问浏览器要求实现后退和撤销功能等。1 定义Memento(备忘录)模式:在不破坏封装性前提下,获取对象内部状态并外部保存,以方便日后恢复对象状态。2 适用情况当需要保存一个对象的内部状态,以方便后原创 2022-04-20 21:20:51 · 1539 阅读 · 0 评论 -
设计模式——Mediator(中介者)模式
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 应用举例——以房产中介为例4.1 Mediator——HouseMediator4.2 具体Mediator——BeijingHouseMediato4.3 Colleague4.4 具体Colleague——ConcreteColleagueOne、ConcreteColleagueTwo5 总结参考文献前言将一个系统分割为多个对象可以增强复用性,但是对象之间相互连接又会降低复用性。如果使用一个中介对象来改变这总交互关系将增强系统健壮性原创 2022-04-20 17:06:29 · 1032 阅读 · 0 评论 -
设计模式——Iterator(迭代器)模式
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 Java应用举例4.1 Iterator4.2 Collection4.3 AbstractList5 总结参考文献前言一个聚合对象,如容器列表,应该提供一种方法让别人可以访问自己的元素,而又不暴露自己的内部结果。同时可能有不同的需求,需要提供不同的遍历过程。1 定义Iterator(迭代器)模式:提供一种方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部结构。2 适用性访问一个聚合对象的内部而不暴露内部结构。支持对原创 2022-04-20 12:14:12 · 440 阅读 · 0 评论 -
设计模式——Interpreter解释器模式
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 应用举例4.1 定义Context4.2 Interpreter定义4.3 具体解释器ValueInterpreter、AndInterpreter和OrInterpreter4.3.1 ValueInterpreter4.3.2 AndInterpreter4.3.3 OrInterpreter4.4 Client5 总结参考文献前言当一个特定类型的问题发生的概率很高,那么可以将该问题解释为简单的表达式,这样我们定义一个解释器,处理这一原创 2022-04-20 10:40:41 · 681 阅读 · 0 评论 -
设计模式——Command命令模式
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 Spring实际应用举例4.1 Command——JdbcTemplate4.2 Receiver——StatementCallback5 总结参考文献前言当我们需要对各种请求进行参数化,模板化,但是不清楚被请求的执行者或操作者的信息时,可以使用Command命令模式。1 定义Command命令模式:将请求封装为对象,从而使你可以使用不同的请求对客户进行参数化,对请求进行排队或者记录请求日志,以及支持可以撤销的操作。2 适用性抽原创 2022-04-19 18:30:26 · 609 阅读 · 0 评论 -
设计模式——Chain of Responsibility职责链模式
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 Spring实际应用举例4.1 职责链——MockFilterChain4.2 Handler——Filter4.3 ConcreteHandler——HttpFilter5 总结参考文献前言当有多个对象都有机会处理一个请求时,如果将每个对象都嵌在请求对象中,可能会产生加大的耦合,比如多个if else处理情况。职责链的模式便可以解耦请求对象和处理对象。1 定义Chain of Responsibility模式:当多个对象都有机会处理原创 2022-04-19 16:59:51 · 204 阅读 · 0 评论 -
设计模式——Proxy(代理)模式
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 Spring实际应用举例4.1 Proxy——JdkDynamicAopProxy5 总结参考文献前言当我们需要控制一个对象的访问,或者需要对一类方法做一些增强时,代理模式便可以很好的实现我们的需求。1 定义Proxy模式:为对象提供一种代理,以实现对这个对象访问的控制。2 适用性当需要控制对象的访问。当需要对对象的功能做一些增强。当我们需要做一些切面功能如:日志、登录拦截等。3 结构3.1 结构图3.2 参与者原创 2022-04-19 11:54:41 · 356 阅读 · 0 评论 -
设计模式——Flyweight(享元)模式
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 Spring实际应用举例5 总结参考文献前言当我们需要使用大量细粒度对象时,如果每个都需要创建实例,可能会浪费大量空间。如果这些对象有共同的内部状态,我们可以考虑使用Flyweight模式。1 定义Flyweight:运用共享技术支持大量细粒度的对象。2 适用性程序使用了大量的对象。使用大量对象造成了存储开销。对象的大多数状态都可以变为外部状态。如果不考虑对象的外部状态,可以使用共享对象代替大量重复的实例对象。应用程序不原创 2022-04-19 10:48:35 · 1344 阅读 · 0 评论 -
设计模式——Facade(外观)模式
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 Spring实际应用举例4.1 Client——我们定义的启动类4.2 Facade——SpringApplication.run()方法4.3 subSystem——ResourceLoader5 总结参考文献前言我们通常会遇到调用一个复杂子系统,而当这个子系统进行更新或其它改进时,将不可避免的影响我们的代码。而Facade就是一种可以帮助我们对复杂子系统进行解耦的一种模式。1 定义Facade模式:为子系统中的一组接口提供一个一原创 2022-04-18 10:19:54 · 6913 阅读 · 0 评论 -
设计模式——Decorator(装饰)模式
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 Spring实际应用举例4.1 Component——InputStream4.2 Decorator——FilterInputStream4.3 ConcreteDecorator——BufferedInputStream5 总结参考文献前言当需要对对象增加一些职责,不需要改变对象的内核构成时,可以使用装饰器模式1 定义装饰器:动态的给对象增加一些职责,比通过子类增加功能更加灵活。2 适用性不影响其他对象情况下,动态、透明的给原创 2022-04-17 20:30:30 · 348 阅读 · 0 评论 -
设计模式——Builder(生成器)模式
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 Spring实际应用举例4.1 Director——AnnotationAwareAspectJAutoProxyCreator4.2ConcreteBuilder——BeanFactoryAspectJAdvisorsBuilder(工具类)5 总结参考文献前言当我们需要构造一个复杂对象时,可以将对象表示和具体的构建过程进行分离,可以使用Builder模式。1 定义Builder模式:将复杂对象的构建和它的表示分离,从而使得同样的构原创 2022-04-17 12:36:21 · 540 阅读 · 0 评论 -
设计模式——Bridge(桥接模式)
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 Java实际应用举例4.1 Abstraction——DriverManager4.2 Implementer——java.sql.Driver4.3 ConcreteImplementer——com.mysql.cj.jdbc.Driver5 总结参考文献前言如果实现一个跨平台的软件,那么如何处理与平台有关的部分和与平台无关部分,也就是抽象和实现的关系,这里就涉及到Bridge桥接模式了。1 定义将抽象部分和实现部分分离,使他们可以原创 2022-04-17 12:02:40 · 666 阅读 · 0 评论 -
设计模式——Adapter(适配器、wrapper包装器)
目录前言1 定义2 适用性3 结构3.1 结构图3.2 参与者4 Spring实际应用举例前言当客户使用的接口和希望使用的接口不一致时,我们应该如何处理使得原本不兼容的接口可以进行协调工作?适配器就是用于解决这种需求的。1 定义将一个类2 适用性3 结构3.1 结构图3.2 参与者4 Spring实际应用举例...原创 2022-04-17 11:23:03 · 755 阅读 · 0 评论 -
设计模式-Composite模式
目录前言定义适用性结构结构图参与者Spring实际应用举例前言定义适用性结构结构图参与者Spring实际应用举例原创 2022-04-17 10:10:41 · 839 阅读 · 0 评论