Java设计模式总结

一、策略模式

1、概念:策略模式定义了算法族,并将算法族封装起来,算法可以相互替换,算法的变动不会影响请求该算法的客户。

2、使用场景:

              1)在不同类需要不同行为,或者不同类需要相同行为但行为表现(内容)不同时,可以使用strategy模式。需注意,在设计继承时需考虑是否使用策略模式,

尤其继承中有动态行为时。

               2)根据不同的情况使用不同的策略,或者策略在未来还可能用其他方式实现。

               3)对客户隐藏具体策略算法的实现细节。

3、补充:封装动态、多用组合少用继承、面向接口编程而不是面向对象编程。



 二、观察者模式

1、概念:观察者模式定义了一系列对象之间的一对多关系,当一个对象状态发生变化时,将会通知依赖它的多个对象。

2、使用场景:

              1)“推”或“拉”信息

              2)触发其他对象方法

              3)解耦存在关系的多个对象

3、补充:为实现有关系对象之间的松耦合而努力。

               继承无法实现最有弹性和最好维护的设计,利用组合和委托可以实现在运行时具有集成行为的效果。利用继承设计子类的行为,是在编译时静态决定的,而且所有子类都会继承到相同的行为。利用组合的做法扩展对象的行为,可以在运行时动态的进行扩展。



三、装饰者模式

1、概念:动态的给一个对象添加一些额外的职责。

2、使用场景:

             1)为某个现有对象动态增加一些功能或职责。

             2)当某个对象的职责经常发生变化或经常需要动态的增加职责。

3、补充:类应该对扩展开放,对修改关闭。如果一段方法已经调试好,修改好bug。新的要求再去修改,则会导致产生新的问题。对扩展开放,可以在不修改代码的情况下就可以搭配新的行为,设计具有弹性,可以应对改变,可以接受新的功能来应对的需求。观察者模式可以在不修改代码的情况下扩展新的功能。开放-关闭原则应用在设计中最容易改变的地方。每个地方都采用开放-关闭原则是一种浪费,增加代码复杂度。




 四、工厂方法模式

1、概念:工厂方法定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到了子类。

2、使用场景:

            1)类不知道自己要创建的是哪一个对象。

            2)类用子类创建对象。

            3)将对象的创建和使用分离

3、补充:抽象倒置原则,要依赖抽象,不要依赖具体类。




五、抽象工厂模式

1、概念:提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

2、使用场景:

             1)有关联的对象需要一起应用并且它们的关系是强迫的。

             2)系统需要由多个关联的对象来组成。

3、补充:工厂方法模式隐藏在抽象工厂模式中。



六、单例模式

1、概念:确保一个类只有一个实例,并且提供一个全局访问点。

 七、命令模式

1、概念:将“请求”封装成对象。使用不同的请求、队列或日志来参数化其他对象。命令模式也可支持撤销操作。

2、使用场景:

             1)命令模式与多个对象之间存在调用关系,封装调用方法即封装请求,隐藏具体实现,将命令者与执行者完全解耦

             2)请求队列

             3)实现日志和事务系统

3、补充:使用“聪明”命令对象,直接实现了请求,而不是将请求委托给接收者。但是调用者和接收者之间的解耦程度差,不能把接收者当作参数传递给命令。



八、适配器模式

1、概念:将一个接口,转换为客户所期望的接口,让原本不兼容的类合作无间。

2、使用场景:

九、外观模式

1、概念:定义了一个统一的接口,用来访问子系统中的一群接口,简化了子系统。

2、使用场景:

            1)一个功能访问需要调用多个对象

            2)客户端程序与多个子系统之间有很大的依赖性

3、补充:最少知识原则:只和你的密友交谈,减少对象之间的交互,只留几个‘密友’)。外观模式使得使用与子系统解耦。



十、模板模式

1、概念:在一个方法中定义了一个算法的骨架,并将一些步骤推迟到子类中。

2、使用场景:

            1)不改变算法结构,重新定义算法中某些步骤

3、补充:好莱坞原则(不要调用(打电话给)我们,等我们调用(打电话给)你),减少对象之间的依赖腐败。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值