写写我认知中的设计模式

发布时间 2023-12-14 21:16:13作者: 天启A

创建型我印象最深刻的就是单例模式,我记得他有一个特别经典的案例:任务管理器;而且我对这个模式的印象也比较深刻:将创建方法私有化,意味着不可以再次创建对象,仅对对象的调用。

最近有所感悟的是生成器模式,其实上次软考的学习中我唯一不理解的就是生成器模式,当时听zst2003老师讲,一头雾水,现在再重新接触一遍豁然开朗。我接触的时候很快就想起了一个token生成的案例

JWT.create().withAudience(userId)
                .withExpiresAt(DateUtil.offsetHour(new Date(),2))
                .sign(Algorithm.HMAC256(password));
    }

不过很遗憾的是,我问chat的时候,chat回答我这不是生成器模式,他是运用了链式调用的方式。不过他也是有一些生成器模式的特征的。关于生成器模式的案例,我印象最深刻的汽车的组装,有的汽车不需要安装一些特殊设备,那在生成的时候就可以省略那些方法。生成器模式就是将一个复杂对象的生成与它的表示分离。印象里我好像使用过生成器模式的,我在我的一个小项目里全文查找还是查找到了一个案例:使用swagger的时候

return new Docket(DocumentationType.SWAGGER_2)  // DocumentationType.SWAGGER_2 固定的,代表swagger2
                .apiInfo(apiInfo()) // 用于生成API信息
                .select() // select()函数返回一个ApiSelectorBuilder实例,用来控制接口被swagger做成文档
                .apis(RequestHandlerSelectors.basePackage("com.example.controller")) // 用于指定扫描哪个包下的接口
                .paths(PathSelectors.any())// 选择所有的API,如果你想只为部分API生成文档,可以配置这里
                .build();

外观模式:我们平时写的javaweb网页其实就是运用了外观模式和命令模式

享元模式:这个印象最深的是讲的下黑白棋,下棋就要用到很多棋子,在网络游戏中还有很多个房间,如果每一个棋子都是一个对象,那么就需要产生巨量的对象,为此产生了享元模式,他可以有效的支持大细粒度的对象。

很难想象迭代器模式居然能作为设计模式,在学习编程的开始我们就学习了循环,我在之前学习了Python的迭代,了解了如何对对象迭代,后面在java中学习了arraylist,hashmap等等,现在又学习了lambda表达式快速迭代,这个应该是我应用的最多最习以为常的模式了

中介者模式观察者模式:这两个模式我还没有亲手实践过,不过我后面打算学习使用javaweb开发一个小的聊天室,我觉得可能会用到中介者模式;我当前仅仅是学习了redis的基础,在后面redis的实践中"follow"应该是一个比较好实现的应用实例

责任链模式是我能想起我可能用过的最后一个设计模式了,这个其实也是很常见的一个设计模式,网页开发初期大家都有过手撸登录注册网页的经历,而登录注册两个功能都经历了多个对象处理请求