03 设计模式
文章平均质量分 63
设计模式
Garen Gosling
骐骥一跃,不能十步;驽马十驾,功在不舍。
展开
-
09 Flyweight享元模式
主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。例子1连接池,用的就是享元模式。连接池中放入一些连接对象,使用的时候去连接池中拿连接对象,用完了再放回到连接池中。下面一个简单的连接池例子,主要是演示享元模式,代码本身可能会有一些并发问题,但是不重要,这里不是主要探讨多线程和并发,主要为了演示享元模式,所以这些小问题可以忽略。package org.garen.flyweight;import java.u原创 2021-08-26 11:14:15 · 126 阅读 · 0 评论 -
08 Composite组合模式
概念概念中的文字内容摘自百度百科:组合模式。https://baike.baidu.com/item/%E7%BB%84%E5%90%88%E6%A8%A1%E5%BC%8F/1441281?fr=aladdin组合模式使得用户对单个对象和组合对象的使用具有一致性。有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。组合模式让你可以优化处理递归或分级数据结构。有许多关于分级数据原创 2021-08-25 13:29:09 · 133 阅读 · 0 评论 -
07 Observer观察者模式
源对象的动作触发观察者做一些相应的动作。例子:孩子(源对象)醒来会哭,孩子一哭,爸爸会喂奶,妈妈会抱,狗会叫。观察者接口:package org.garen.observer.v2;/** * 观察者接口 */public interface Observer { void actionOnWakeup();}观察者类:package org.garen.observer.v2;public class Dad implements Observer { pr原创 2021-08-19 13:11:52 · 122 阅读 · 0 评论 -
06 ChainOfResponsibility责任链模式
场景1一个网站,可以留言评论发消息等。消息通过前端输入文字,然后传给后端,再进入数据库,然后在网站展示出来。如果文字中包含网页脚本,会破坏我们的网页;如果包含敏感词,会对网站造成更严重的影响,甚至可能触犯法律法规,所以我们需要对消息进行过滤,对过滤处理的有问题的文字进行替换处理。我们定义一个消息类:package org.garen.cor;/** * 消息 */public class Msg { private String name; private String ms原创 2021-08-18 13:00:44 · 81 阅读 · 0 评论 -
05 Decorator装饰器模式
看这篇文章就可以了《装饰器模式(Decorator)——深入理解与实战应用》原创 2021-08-17 17:13:50 · 87 阅读 · 0 评论 -
04 Facade门面-Mediator调停者
Facade门面模式一个内部很复杂的系统,抽取出一个门面(类)对外部提供服务。对外很简单,只需要和门面打交道就可以了,由门面再去和内部复杂系统打交道。没有使用门面模式:使用了门面模式:Mediator调停者模式一个内部很复杂的系统,内部十分复杂,如果增加一个功能,要和好多好多其它功能关联。可以加入一个调停者(类),所有功能相互直接不再有关联,大家都关联这个调停者。没有使用条停止模式:使用了调停者模式:两个设计模式的关系Facade门面-Mediator调停者完全可以是一个。再外部原创 2021-08-17 16:50:57 · 84 阅读 · 0 评论 -
03 Factory工厂模式
简单工厂没有使用工厂车类:package org.garen.factory;/** * 车 */public class Car { public void go() { System.out.println("Car go ..."); }}飞机类:package org.garen.factory;/** * 飞机 */public class Plane { public void go() { Sys原创 2021-08-17 16:15:25 · 127 阅读 · 0 评论 -
02 Strategy策略模式
strategy_策略模式-1写一个排序类Sorter,写一个比较int类型方法;如果需要实现double类型的比较,就再写个double类型的方法;如果需要实现float类型的比较,就再写一个float类型的方法。数值类型的很好比较,直接比较数值大小就可以了。那么,如果想要比较自定义的类Cat,要怎么比较呢?重写排序方法,把int类型改成Cat类型?直接改是不行的,那就给Cat类提供一个比较的方法。排序类 Sorter.javapackage org.garen.strategy;/**原创 2021-08-16 22:32:33 · 96 阅读 · 0 评论 -
01 Singleton单例模式
第1种写法package org.garen.singleton;/** * 饿汉式 * 类加载到内存后,就实例化一个单例,JVM保证线程安全 * 简单实用,推荐使用! * 唯一缺点:不管用到与否,类装载时就完成实例化 * (话说你不用的,你装载它干啥) */public class S1 { private static final S1 INSTANCE = new S1(); private S1() {} public static S1 getIns原创 2021-08-16 11:18:44 · 76 阅读 · 0 评论