Java 23种设计模式Demo案例大全 ☞ 【已完结】

注:2022年10月22日,已更完全部案例!!!!!!!!!!!!!!!!!!!!!!!!


注:已经延期好久好久了,从去年11月份到今年8月份,卧槽,不敢想啊,博主真是没时间整啊,太忙没时间?那都是借口,主要是坚持很难,我尽量有时间续更下!这个必须完成,太TM经典了,必须完成!!!

       俗话说,古有<孙子兵法>,掌握之,能打胜仗也,今有<23种设计模式代码案列大全>,学习之,能敲出骇世惊俗的代码;不信吗,若不信的话,那是你没有真正掌握其中的思想精髓;

      下面请各位牛人也好,看客也好,跟着博主的代码过一遍,说实在的,我比较喜欢扯,我再插一句,代码真的比我写的文字精彩多了,那真是我的呕心沥血之作啊,耗时百天啊...扯归扯,文字看不进去的,各位看官可直奔文末,找到本篇项目的github地址,下载下来,浊酒一杯,不,是沏茶一壶,慢慢看,慢慢品味设计模式带来的脑细胞冲击吧!

========================================= =================================

注:更新了两个设计模式,分别是策略模式和模板方法,同时又回顾了之前的设计模式。每一个设计模式都可以单开一篇博文,每一个设计模式讲起来感觉都像是在讲一部大片;

       如果光用文字阐述他们各自的业务场景以及他们各自的含义、用途和优缺点的话,我想,没有几个人会看进去的;说和写是两码事,而用好又是另一码很重要的事情;先理解含义,然后能简单编码上手,最后能巧妙的应用于自己的业务系统中,三者是循序渐进的,而本篇侧重于前两者,也就是说和写,还没有上升到具体业务场景的应用层面上,关于应用,更多的是需要自己结合自己的项目去慢慢琢磨和体会!

      正如设计模式是一种思想而不是一种硬编码那样,我们不能寄希望于能熟记所有的设计模式(除非你每天只干一件事情,没事就在那琢磨每一种设计模式它的使用场景...),但是如果我们能用其中一种或者两种设计模式来解决我们业务系统的复杂性和降低各个模块的耦合性以及增加系统的可扩展性的话,那我们学习设计模式的目的也就达到了!

=========================================================================

注:新增了两个设计模式,一个是观察者模式,另一个是迭代子模式,其中观察者模式很经典啊,废了点脑壳子想了一个订阅的例子,当然也调侃了一下三国,将三国搬到了现实,代码写起来真是爽;另外一个是迭代子模式,这个写完了,突然对迭代器重新认识了一遍,倍感亲切!

=========================================================================

注:又增加了两个设计模式,一个是命令模式,一个备忘录模式,命令模式是请求发起者和执行者之间的解耦,而备忘录模式则意在存储对象的状态,可以任意记录和回退对象的状态;

=========================================================================

注(2020.05.04):时间过的是真快啊,这里已经成了我回忆过往的地方了。开始写博到现在,已经快3年了,本篇博文已经写了快2年了,账号注册都10年了.......

=========================================================================

注(2021.02.21):我又又又更新了,针对观察者模式补了几个案例,如下:

任务回调函数演示:

基于Spring事件机制扩展的用户注册完发邮件事件案例演示:

=========================================================================

一、项目GitHub地址

下面是已全部完成的Demo案例,后续如果有时间和精力会持续更新和完善的.........



 

地址:https://github.com/kobeyk/SpringBoot-DesignMode.git


Gitee地址(这个国内的,速度快,两个仓库是同步的):https://gitee.com/appleyk/SpringBoot-DesignMode/tree/v0.1.1/


二、预计两到三周完成,项目已传至我的GitHub,持续更新中!

【每种设计模式都会标记不同的package,每种设计模式例子尽量全尽量通俗易懂尽量符合JavaDoc规范

穿插一下 ======> 【抽象工厂模式】

雷柏键盘 -- M550,黑色
雷柏鼠标 -- M590,有线
=======================分割线,注意区别
雷柏键盘 -- M550,黑色
罗技鼠标 -- M590,无线

穿插一下 ======> 【原型模式】-- 【对象克隆】-- 【对象深浅拷贝】

穿插一下 ======> 【建造者模式】

穿插一下 ======> 【适配器模式】

穿插一下 ======> 【装饰模式】-- 【装饰者模式】

穿插一下 ======> 【代理模式】

穿插一下  ======>【外观模式】

============== 分割线【使用外观模式AB】 ==============
人工智能系统正在启动,请您稍等.... =====>人工智能系统,模块A,子系统A,主要负责启动系统
等待1s
等待2s
等待3s
人工智能系统已经启动,正在加载数据 =====>人工智能系统,模块A,子系统B,主要负责加载数据
.........
数据已完成加载
欢迎进入Appleyk's 基于电影知识图谱的人工智能系统 =====>人工智能系统,模块B,子系统C,欢迎界面
关于系统的介绍请参考博文:https://blog.csdn.net/Appleyk/article/details/80422055
亲爱的用户,以下是你18年截止到今天看的电影的大数据统计结果:=====>人工智能系统,模块B,子系统D,开始工作
《《《《 ========== 》》》》》
爱情动作片:10次
恐怖片:1次
喜剧片:6次
总花费:680.5元
《《《《 ========== 》》》》》

穿插一下 ======> 【组合模式】

穿插一下  ======>【任务链】--【职责链】--【责任链】

穿插一下  ======>【享元模型】

穿插一下 ======> 【策略模式】

输出结果:

穿插一下 ======> 【模板方法】

穿插一下 ======> 【观察者模式】

输出效果:

穿插一下 ======> 【迭代子模式】

输出结果:

穿插一下 ======> 【命令模式】

输出结果:


 

穿插一下 ======> 【备忘录模式】

输出结果:

请敬请期待!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

三、项目GitHub地址

下面是已全部完成的Demo案例,后续如果有时间和精力会持续更新和完善的.........

地址:https://github.com/kobeyk/SpringBoot-DesignMode.git

  • 32
    点赞
  • 119
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2 结构型模式 这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Filter、Criteria Pattern) 组合模式(Composite Pattern) 装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3 行为型模式 这些设计模式特别关注对象之间的通信。 责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4 J2EE 模式 这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。 MVC 模式(MVC Pattern) 业务代表模式(Business Delegate Pattern) 组合实体模式(Composite Entity Pattern) 数据访问对象模式(Data Access Object Pattern) 前端控制器模式(Front Controller Pattern) 拦截过滤器模式(Intercepting Filter Pattern) 服务定位器模式(Service Locator Pattern) 传输对象模式(Transfer Object Pattern)
当使用Java的Optional类时,以下是一些常见的用法和示例案例: 1. 创建Optional对象: ```java Optional<String> optionalValue = Optional.of("Hello"); Optional<String> emptyOptional = Optional.empty(); Optional<String> nullableOptional = Optional.ofNullable(null); ``` 2. 判断Optional对象是否有值: ```java Optional<String> optionalValue = Optional.of("Hello"); boolean hasValue = optionalValue.isPresent(); // true ``` 3. 获取Optional对象的值: ```java Optional<String> optionalValue = Optional.of("Hello"); String value = optionalValue.get(); // "Hello" ``` 4. 获取Optional对象的值(安全方式): ```java Optional<String> optionalValue = Optional.of("Hello"); String value = optionalValue.orElse("Default Value"); // "Hello" Optional<String> emptyOptional = Optional.empty(); String value2 = emptyOptional.orElse("Default Value"); // "Default Value" ``` 5. 如果Optional对象非空,执行操作: ```java Optional<String> optionalValue = Optional.of("Hello"); optionalValue.ifPresent(val -> System.out.println(val)); // 输出 "Hello" ``` 6. 如果Optional对象非空,执行操作;否则执行其他操作: ```java Optional<String> optionalValue = Optional.of("Hello"); optionalValue.ifPresentOrElse( val -> System.out.println(val), () -> System.out.println("No value")); // 输出 "Hello" Optional<String> emptyOptional = Optional.empty(); emptyOptional.ifPresentOrElse( val -> System.out.println(val), () -> System.out.println("No value")); // 输出 "No value" ``` 7. 使用map转换Optional对象的值: ```java Optional<String> optionalValue = Optional.of("Hello"); Optional<Integer> lengthOptional = optionalValue.map(String::length); lengthOptional.ifPresent(val -> System.out.println(val)); // 输出 5 ``` 8. 使用flatMap转换Optional对象的值: ```java Optional<String> optionalValue = Optional.of("Hello"); Optional<Character> firstCharOptional = optionalValue.flatMap(val -> { if (val.isEmpty()) { return Optional.empty(); } else { return Optional.of(val.charAt(0)); } }); firstCharOptional.ifPresent(val -> System.out.println(val)); // 输出 'H' ``` 这些是Java Optional类的一些常见用法和示例案例。根据具体需求,你可以选择适合的用法来处理Optional对象。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值