
设计模式学习
大王我亲自来巡山
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式之职责链模式
应用场景比如,请假审批流程中,请假1-3天由院长审批,请假3-10天由行政主管审批,请假10-30天由董事长审批,请假一个月以上,直接由老板审批。这种需求其实非常常见。mvc中的handler中也使用了职责链模式。职责链模式顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不原创 2021-06-09 17:27:03 · 79 阅读 · 1 评论 -
设计模式之策略模式
概念在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。应用场景比如,最经典的应用场景就是比较器Comparator了,在Java中的比较器,自己实现Comparator接口,然后在实现中具体定义怎么比较,然后,在Array.sort方法中,new一个自己的比较器传进去,就可以实现自定义排原创 2021-06-09 16:12:01 · 78 阅读 · 0 评论 -
设计模式之状态模式
应用场景分析在一些平台中,比如淘宝订单中,经常会有不同的状态,已拍下未付款,拍下已付款,未发货,已发货等等,那么,代码中如何实现?一般思路一般思路来说,就是设定一些值来表示状态,然后通过if、else来判断,然后依次比对。但是,如果代码已经写好了,现在业务扩展,需要添加新状态,怎么办?是不是就要改变之前写好的代码了?在if、else中添加新逻辑,这样的话,就违反开闭原则了。状态模式用状态模式,就是利用接口和抽象类的抽象功能,有一个状态的统一接口,然后,所有的具体状态实现接口,并具体实现不同方法。这原创 2021-06-09 14:55:39 · 56 阅读 · 0 评论 -
设计模式之备忘录模式
概念备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。比如说,保存之前浏览的页面。关键代码:客户不与备忘录类耦合,与备忘录管理类耦合。备忘录模式使用三个类 Memento、Originator 和 CareTaker。Memento: 包含了要被恢复的对象的状态。Originator:被保存的对原创 2021-06-08 16:52:50 · 81 阅读 · 0 评论 -
设计模式之中介者模式
概念中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。关键代码:对象 Co原创 2021-06-07 16:18:52 · 100 阅读 · 0 评论 -
设计模式之观察者模式
概念当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。举个例子,观察者模式其实应用非常广泛,比如,订阅和关注某个人,就需要使用观察者模式,当你关注的人更新了内容,就会自动推送给你。结构观察者模式使用三个类 Subject、Observer 和 Client。Subject 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法。关键代码:在抽象类里有一个 Arra原创 2021-06-07 15:18:39 · 92 阅读 · 0 评论 -
设计模式之迭代器模式
概念迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。个人理解说白了,就是用户在使用的数据的时候,由于不同的数据的组合形式不一样,因此,遍历其中数据的算法方式也不一样。但是,用户肯定不想关心你的数据结构,只想通过一个统一的接口拿到数据,因此,迭代器模式产生。迭代器模式,就是把各种不同的数据结构遍历方法封装成统一的接口,供用户使用,用户只需要通过简单的ne原创 2021-06-04 17:57:45 · 84 阅读 · 0 评论 -
设计模式之命令模式
概念命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。个人理解命令模式,就像是司令发布命令,然后具体由谁执行,司令并不关心,因此,命令模式就是:1.命令发布者invoker 使用命令对象的入口,可以整合很多命令,相当于遥控器2.命令分配者Command,聚合了具体命令实施者,然后,接受invoker 的命令,然后,分配给具体的命令实原创 2021-06-02 18:45:29 · 154 阅读 · 0 评论 -
设计模式之模板模式
概念在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。个人理解说白了,就是在一个抽象类中,定义一个抽象方法,这个抽象方法中,写其他方法的执行过程,这个方法就叫做模板方法。比如,先执行方法一,再执行方法二,就相当于一个模板,定义其他方法的执行顺序。被定义执行顺序的方法,可以是具体方法,那么,这些方法的实现就写死了,对于在流程中不会变的操作,可以用具体方法实现原创 2021-06-02 16:23:31 · 82 阅读 · 0 评论 -
Spring中的代理模式(静态、动态代理)
先讲一下为什么学习Spring会专门来研究动态代理,那是因为,Spring的核心AOP的底层,其实全都是用动态代理来实现的。代理模式是一种设计模式,设计思想,包括:静态代理动态代理先解释一下代理的思想,打个比方,代理的作用其实就相当于中介,比如生活中的例子,当我们需要租房的时候,往往很难直接找到房东直租的,这大家都有体会吧,房东才没那闲心整天跑租房的业务,因此,房东把租房这件事,委托给中介,然后,我们需要租房的时候,其实是找中介租房,这就是代理模式的思想。因此,代理模式中的几个角色:抽象角色:一原创 2020-11-26 18:10:10 · 423 阅读 · 0 评论 -
设计模式之享元模式
享元模式角色FlyWeightFactory享元工厂类,用于构建一个池容器。FlyWeight抽象的享元角色,产品大的抽象类,同时定义对象的外部状态和内部状态。ConcreteFlyWeight是具体的享元角色,是具体的产品类,实现FlyWeight定义的功能。UnShareConcreteFlyWeight不可共享的角色,一般不会出现在享元工厂中。内部状态存储在对象内部且不会随环境改变而改变。外部状态指对象得以依赖的一个标记,是随环境改变而改变,不可共享的状态。...原创 2021-05-31 16:06:19 · 74 阅读 · 0 评论 -
设计模式之外观模式
概念外观模式对外屏蔽了子系统的细节,降低了客户对子系统使用的复杂性。通过合理使用外观模式,可以帮我们更好的划分访问顺序和层次。个人理解说白了,外观模式就是类似于封装的思想,把复杂的各种实例聚合在一起,然后专门抽象出来一个类来管理,对外提供客户可以直接使用的接口,客户不必关心怎么组织实现的。例如:家庭影院包含投影仪、音响、爆米花机等等对象。家庭影院就可以抽象成一个外观模式,里面组合上投影仪、音响、爆米花机等对象,然后组合他们的功能和顺序,然后对外提供看电影,暂停,关电影等接口就行了。...原创 2021-05-28 18:24:56 · 77 阅读 · 0 评论 -
Java设计模式之组合模式
概念组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。使用场景1、想表示对象的部分-整体层次结构(树形结构)。2、希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。结构以及个人理解Component组合模式中的所有元素都实现 Component接口或者抽象类,都是他的子类。因此,组合模式适用于组原创 2021-05-27 19:08:21 · 135 阅读 · 0 评论 -
装饰者模式
问题提出类似于账单系统,每点一份菜,就会动态的加钱,各种菜品的组合太多,如果全部写死,代码量太大,如何动态的累加所有费用呢?就用到装饰者模式,就是类似于不断递归自己的过程。概念装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。代码结构Component 类充当抽象角色,不应该具体实现。被装饰类继承Component。装饰类引用和继承 Component 类,具体扩展类重写父类方法。原创 2021-05-26 18:18:59 · 96 阅读 · 0 评论 -
设计模式之桥接模式
概念桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。问题提出桥接模式用来解决类爆炸问题。比如,现在有抽象类汽车品牌和抽象类汽车挡位。汽车品牌有三个不同牌子,挡位有三个不同挡位。那么,如果我们要排列组合出所有的可能,就需要33=9种,也就是说,我们在实际开发中,可能最多就需要创建9种不同的汽车实例。如果是1010呢?就是100。这就是类爆炸的问题。桥接模式思路桥接模式是如何解决此问题呢?说白了,还是利用接口的抽象功能,比如,把汽车品牌抽象成接口,然后,在汽车挡位的抽象类中,聚合原创 2021-05-25 17:04:35 · 171 阅读 · 0 评论 -
适配器模式
使用场景比如,生活中,家用220V的电压是不能直接给手机充电的,需要电源适配器,将电压转换成5V。这就是适配器模式的意思。将原本不兼容的接口兼容。类适配器模式原始类:需要被转换的类。适配器接口:定义抽象的适配器方法。适配器类:实现适配器接口。客户端:调用适配器类转换后的结果。适配器类通过继承原始类,拿到需要被转换的数据,然后,实现适配器接口来实现转换功能,给客户端调用。对象适配器模式原始类:需要被转换的类。适配器接口:定义抽象的适配器方法。适配器类:实现适配器接口。客户端:调用适配器原创 2021-05-24 18:47:30 · 88 阅读 · 0 评论 -
建造者模式,用生活中具体例子来理解建造者思想
概念将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。概念理解其实我个人最烦的就是上面那种抽象概念,一点用没有,不过我还是写上了哈哈。谈谈个人对建造者模式的理解。首先,举个例子,比如,你喜欢吃炸酱面,但是你发现,门口的每家炸酱面的做法都不尽相同,每家味道都不一样,因为具体步骤不太相同。但是,反观肯德基,你会发现,无论你去哪个城市的哪家肯德基,味道都一样,这是为什么?就是因为,肯德基的流程步骤是固定的。再说个场景,如果我们需要一个对象,但是这个对象的属性特别多,有一些是必须原创 2021-05-20 17:38:05 · 207 阅读 · 0 评论 -
原型模式(深拷贝和浅拷贝)
原型模式概念原型模式,其实就是拷贝对象的意思,如何拷贝一个对象?最普通的方式就是再new一个,然后将需要被拷贝对象的所有属性一个一个复制到新对象中。这种方式显然效率极低,如果对象的属性特别多呢?一个个写不疯掉了?因此,Java中提供了原型模式,就是用来拷贝对象使用的。源码中的案例在Spring框架中,创建bean的时候,有个标签,让你选择是:PrototypeSingleton其中Singleton指的是单例模式而Prototype就是原型模式的意思,意思是,Spring容器中这个对象是按原创 2021-05-19 18:43:41 · 917 阅读 · 3 评论 -
工厂模式(简单工厂、工厂方法、抽象工厂)
简单工厂为什么要用工厂模式?因为,基于面向接口编程的思想,程序开发者,往往只会向程序的使用者提供接口,这个接口,是指广泛意义上的接口,就是开发者提供给你的入口,不单单指Java中的接口。因此,我们在开发时,用到的各种jar包,其实就是class文件,我们往往是拿不到源代码的,也不能修改源代码,因此,我们是不直到源代码的实现细节的。就像下面的代码,分割线以上,是开发者提供给你的接口及具体实现,分割线以下,是使用者,使用者使用时,是不能直接new开发者的Hamburger对象的,首先,使用者就应该不知道具原创 2021-05-18 17:26:54 · 94 阅读 · 0 评论 -
单例模式七大写法
静态常量饿汉式用final关键词来保证单例,用private构造器保证无法new新对象。优点:线程安全缺点:内存浪费public class Singleton { private final static Singleton singleton=new Singleton(); private Singleton(){ } public static Singleton getInstance(){ return singleton;原创 2021-05-17 18:34:49 · 97 阅读 · 0 评论 -
Java设计模式七大设计原则概念理解
单一职责原则概念:对类来说,一个类应该只负责一个职责。通常情况下,我们应该遵守单一职责原则,只有逻辑足够简单时,才可以在代码级别违反单一职责原则:也就是说,类中的方法足够少时,可以在方法级别保持单一职责原则。个人理解:就是一个类只负责一个具体功能,不要让一个类负责多个功能,那样就会造成这几个功能间的耦合过高,结构混乱,不容易修改扩展,会影响其他功能。因此,单一职责原则就是不要把几个功能混在一起的意思,同时,如果类里面的方法很少,也可以在方法层面遵守单一职责原则,各个方法实现不同的功能就行,说白了就是原创 2021-05-13 17:27:35 · 78 阅读 · 0 评论