创建型模式
一、单例模式—饿汉式和懒汉式
1.核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。
2.应用场景:Windows中的任务管理器;数据库连接池;项目中的配置文件类等等。
3.优点:减少了系统性能开销。
4.五种单例模式:
①饿汉式(线程安全,调用效率高。但是,不能延时加载)
![](https://i-blog.csdnimg.cn/blog_migrate/10bfcddb6d84e06fb4f63e52922a898a.png)
类初始化时立即加载,类初始化时,处于天然的线程安全模式,因此线程安全,方法没有同步,效率高。
②懒汉式(单例对象延迟加载)
![](https://i-blog.csdnimg.cn/blog_migrate/c2431026bf36b690a7bdb7853142f405.png)
真正用的时候才加载,资源利用率高了,但每次调用getInstance()方法都要同步,并发效率低。
![](https://i-blog.csdnimg.cn/blog_migrate/28822406bfd6d76400c8e22fdcf67bfa.png)
将同步内容放到if内部,提高了执行效率,不必每次获取对象都进行同步,第一次创建之后就不需要在外等待了。
看起来不错,但是由于编译器优化原因和JVM底层内部模型原因,偶尔会出问题,不建议使用。
④ 静态内部类实现方式(也是懒加载)
![](https://i-blog.csdnimg.cn/blog_migrate/03e8af9860c36f48e5a4a0a68a0e3d13.png)
外部类没有static属性,则不会像饿汉式那样立即加载对象,只有真正调用getInstance(),才会加载静态内部类。加载 类时是线程安全的,兼并了并发高效调用和延迟加载的优势。
⑤使用枚举实现单例
![](https://i-blog.csdnimg.cn/blog_migrate/b29c3cb80d297718043d8e5ef2c175e8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b90f2ec0175903f74849ff6386694c84.png)
实现较简单,枚举本身就是单例模式。由JVM从根本上提供保障!避免通过反射和反序列化的漏洞。
缺点是无延迟加载。
二、工厂模式
1.概念:实现了创建者和调用者的分离,由工厂去new。
2.三种模式
①简单工厂模式(用来生产同一等级结构中的任意产品,对于增加新的产品,需要修改已有代码)
![](https://i-blog.csdnimg.cn/blog_migrate/1b295c894c87dc305832d01d2222dd50.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e795a4382dacf2541c5a6c67c288ceeb.png)
不用工厂,调用者要知道非常多,不仅要知道接口Car还要知道实现类。
![](https://i-blog.csdnimg.cn/blog_migrate/2ed68ab45d4bee26737aee9c97e832cd.png)
简单工厂类
![](https://i-blog.csdnimg.cn/blog_migrate/1e6e7899f96c6ebcf8440bd974e3c9b7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d1593177514ebee5b01ed6908cfa8b34.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3f64238e3af8569b1412fd4d9a27b8c1.png)
仅需要知道接口,和从哪拿到产品
但违反了开闭原则(增加新的产品要修改代码)
②工厂方法模式(用来生产同一等级结构中的固定产品,支持增加任意产品)
创建工厂接口
![](https://i-blog.csdnimg.cn/blog_migrate/b9096b060316eefb9e375358d337a293.png)
创建具体工厂
![](https://i-blog.csdnimg.cn/blog_migrate/0710abc1d104d0fe7580309c780f9a2a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/63cb6b74bd691778fc668b5e0ba0feca.png)
符合开闭原则,但增加了很多类
③抽象工厂模式(用来生产不同产品族的全部产品,针对增加新的产品,无能为力,支持增加产品族)
![](https://i-blog.csdnimg.cn/blog_migrate/389978c5d4315047b9de8e178badcba0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bee2c5510ae35d8834bf8437392bba03.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b77f1f7736b530a803209a36b4b766ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e032a17d5103bf1449a49302dd980184.png)
三、建造者模式
1.概念
2.例子
![](https://i-blog.csdnimg.cn/blog_migrate/983fdf3c6a0a585b83d17838d3bb5abc.png)
四、原型模式
1.概念:
![](https://i-blog.csdnimg.cn/blog_migrate/07ab812459b2f11b6b85449a4b34d59b.png)
2.实现
![](https://i-blog.csdnimg.cn/blog_migrate/a7331704ec44ce8b27271a23abc319ff.png)
浅复制,Date实际上是同一个
![](https://i-blog.csdnimg.cn/blog_migrate/378349090241fea8e14777e1f4fa613f.png)
深复制
![](https://i-blog.csdnimg.cn/blog_migrate/48f80cfbc7f4e12d63184ce817d3092f.png)
也可以通过序列化和反序列化实现深复制
![](https://i-blog.csdnimg.cn/blog_migrate/39f7d0f5b5150e479d0c98f94274bbdb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c9f4821b89392677329f7e407e537476.png)
结构型模式
![](https://i-blog.csdnimg.cn/blog_migrate/7bb03135343582be2f89770a7cc3a884.png)
一、适配器模式
1.概念
![](https://i-blog.csdnimg.cn/blog_migrate/b38f0245dbd8305f82a403a4bfb8c08a.png)
2.例子
![](https://i-blog.csdnimg.cn/blog_migrate/bf3b999d873fd615cb64d1eee3e36644.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7438eaf392e6d2f1a607a3416b38d946.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2633d9ec078c4d8ef09fcac1860df0f5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1fbee289b29641f030de722287e624e0.png)
组合适配器
![](https://i-blog.csdnimg.cn/blog_migrate/37d68d35056b8e389c474536f5f5eee8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a5d6cc1de2a859fc64a0497dee89f9a6.png)
3.应用
![](https://i-blog.csdnimg.cn/blog_migrate/ac3a3f859432847b4e823c3c13490abe.png)
二、代理模式
1.概念:
![](https://i-blog.csdnimg.cn/blog_migrate/346402a642869a2d88c56de558e40d77.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8b57c317fb3d7ecea0df3bf37a2fb92c.png)
2.应用场景和分类
![](https://i-blog.csdnimg.cn/blog_migrate/a7219748bda3d7da3918bc309b2960fb.png)
3.静态代理
![](https://i-blog.csdnimg.cn/blog_migrate/671a7bbab350aa947f34ae522af08059.png)
4动态代理
![](https://i-blog.csdnimg.cn/blog_migrate/1a27940589b961b06ba6574c301e3a4a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/891c1ca0fafecd3ad6787c909ca0dfc6.png)
处理类
![](https://i-blog.csdnimg.cn/blog_migrate/d6d3a71ee307111809b61e9dfd8cefff.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a8ba426a3b671d5d49f2b7cb77a95d79.png)
生成代理
![](https://i-blog.csdnimg.cn/blog_migrate/bf258ce371c0e175b6fa2805e174a89c.png)
原理
![](https://i-blog.csdnimg.cn/blog_migrate/333da8bda2cb66089c90f1919a965d95.png)
三、桥接模式
两个维度,分开来继承,一个持有另外一个。
1.场景及问题
![](https://i-blog.csdnimg.cn/blog_migrate/8ad071727b88eef8f46306a23219a6d0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5bf26b9403aeae0254f7e4391b82df53.png)
2.桥接模式
![](https://i-blog.csdnimg.cn/blog_migrate/40975f0e234e367078633e8a873b6acf.png)
四、组合模式
1.场景及核心
![](https://i-blog.csdnimg.cn/blog_migrate/4c853d7809ec37b854b48a0a3f278f3f.png)
2.实现例子
![](https://i-blog.csdnimg.cn/blog_migrate/949ed391461e1b1eb4031f68e36c5478.png)
![](https://i-blog.csdnimg.cn/blog_migrate/da9d2a18ff4b7670f310ea7f66961ef9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ba508523b8fc497026fb847ebff86c21.png)
![](https://i-blog.csdnimg.cn/blog_migrate/efcf046acebc9a3ba03cb515a9a2d43f.png)
调用
![](https://i-blog.csdnimg.cn/blog_migrate/085032d13e438a7a2210a5a0bdba0f66.png)
五、装饰模式
1.概念
![](https://i-blog.csdnimg.cn/blog_migrate/057167104eef156e611dfe655206b853.png)
2.实现细节
![](https://i-blog.csdnimg.cn/blog_migrate/8d1229168830500abbed00865255b64c.png)
车
![](https://i-blog.csdnimg.cn/blog_migrate/93e74f137bfb5d8e7545dee89a9d34d7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/036406d9e8c3a959430a75a015bcdd11.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bcdc0ecf23917f8d0371abcfbcc2037a.png)
调用
![](https://i-blog.csdnimg.cn/blog_migrate/337afe5202d1826462b749375ce1dedd.png)
3.总结
![](https://i-blog.csdnimg.cn/blog_migrate/d244a4f12f4a5e83af36fdc463e3d4f6.png)
六、外观模式
1.迪米特法则
![](https://i-blog.csdnimg.cn/blog_migrate/919a37fc4641a03c6fe7fa878c69f3e2.png)
2.核心
![](https://i-blog.csdnimg.cn/blog_migrate/0874f3b5bd20b05f5e4faa50776d84d0.png)
3.例子
![](https://i-blog.csdnimg.cn/blog_migrate/4482d6b0a5936cb24127f3620354ad0c.png)
七、享元模式
1.场景和核心
![](https://i-blog.csdnimg.cn/blog_migrate/08315b03118578e8782e1bade88b690a.png)
2.例子
![](https://i-blog.csdnimg.cn/blog_migrate/92186394929f159090db976a78ada706.png)
3.实现
![](https://i-blog.csdnimg.cn/blog_migrate/a870a20b10f93011b9042af70b8b9ae0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7a85135505972fc7453d088bb069a98c.png)
外部状态
![](https://i-blog.csdnimg.cn/blog_migrate/e17e3cdbecabdfb9a0e249034e951df4.png)
享元类
![](https://i-blog.csdnimg.cn/blog_migrate/8db928ccc6176f4290831e762e858a96.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a361b2b38b2ef995ebbd53c8061a986f.png)
享元工厂
![](https://i-blog.csdnimg.cn/blog_migrate/a9fab4e75d3b0ea03540ab5c1ab5f56a.png)
调用
![](https://i-blog.csdnimg.cn/blog_migrate/dd789ace577431e71b32062f79e211bd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e7154f01ea306a1b0f0aebc085685da3.png)
4.优缺点
![](https://i-blog.csdnimg.cn/blog_migrate/9108ad7cdf7b4b2ee8ac0b02b5b8f185.png)
行为型模式
一、责任链模式
1.定义及场景
![](https://i-blog.csdnimg.cn/blog_migrate/74bd7e7601c8b48edd487511f2a34f31.png)
2.例子
![](https://i-blog.csdnimg.cn/blog_migrate/669fc102dcb7e1102714bad06be9917d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/051d2051d132554da48eadc735332fda.png)
二、迭代器模式
1.场景
![](https://i-blog.csdnimg.cn/blog_migrate/1861152985627aaefd6cb0df8b4050e6.png)
2。结构
![](https://i-blog.csdnimg.cn/blog_migrate/f0b959b1eec88e30f04666b86d7f3568.png)
一般是作为内部类实现的。
三、中介者模式
1.场景及核心
![](https://i-blog.csdnimg.cn/blog_migrate/56f5fdae4d7333a9e17b7c507f4158e6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ba98b16a7a1cf081d34293afe8b19b5d.png)
2.例子
![](https://i-blog.csdnimg.cn/blog_migrate/ef61e310b42f94531354c65d3a0547fa.png)
四、命令模式
1.介绍
![](https://i-blog.csdnimg.cn/blog_migrate/a5534d785a8d68ba3b2ad4ba4912633c.png)
2.结构
![](https://i-blog.csdnimg.cn/blog_migrate/b03bf8fd81279dda25f4a4fa50d3886a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5c27b71b3d26ca7e9db0bcd5f86f9836.png)
五、解释器模式
1.介绍
![](https://i-blog.csdnimg.cn/blog_migrate/97abcfda3113cdd1eef49b611e864cc7.png)
六、访问者模式
1.简单介绍
![](https://i-blog.csdnimg.cn/blog_migrate/d9130fb6654820671e2b162fbd2ed219.png)
七、策略模式
1.场景
![](https://i-blog.csdnimg.cn/blog_migrate/e54048a832cb94b6d2cd59d8dfe3460b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c16ffdc391337476c245949edf3cc8c1.png)
八、模板方法模式
1.场景
![](https://i-blog.csdnimg.cn/blog_migrate/1e1ea533f4f902ac5b191d5e6b54e76f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/074fc9d36962c9fcb2a6463ec24072e0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/87bd410c9a7dcbc5fd5ff5c31a34dafd.png)
2.实现
![](https://i-blog.csdnimg.cn/blog_migrate/644846a769be020169868df409fdbd00.png)
九、状态模式
1.场景
![](https://i-blog.csdnimg.cn/blog_migrate/36d62ea33e24cb8af5d0d4bcb7801b8f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a8de2820f4a31eeb9bc6e111eb68b3cd.png)
2.实现
![](https://i-blog.csdnimg.cn/blog_migrate/9255d445db811bcc1cebbfcb7a1bd693.png)
十、观察者模式
1.场景
![](https://i-blog.csdnimg.cn/blog_migrate/2b4859535e0adef484a08ab3f0bf7813.png)
2.核心
![](https://i-blog.csdnimg.cn/blog_migrate/a9178b878ac16f0340ed529aa2f0ce22.png)
3.实现
![](https://i-blog.csdnimg.cn/blog_migrate/018f84cb32e48271af4664bc48ba4eb5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/95ad6c2591b012a20cce18df9236762b.png)
十一、备忘录模式
1.场景
![](https://i-blog.csdnimg.cn/blog_migrate/7ba1d78a0cb344a47858c8a2081dd7cc.png)
2.核心及实现
![](https://i-blog.csdnimg.cn/blog_migrate/9d3e8de8f7351a2ba033cde0993fa6d0.png)