博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1. 设计模式学习
阅读量:5040 次
发布时间:2019-06-12

本文共 1757 字,大约阅读时间需要 5 分钟。

设计模式

  •   结构型模式                                                                 (8种)
    • 门面模式(外观模式)
    • 组合模式
    • 装饰器模式

        

  •    行为模式                                                                      (12种)
    • 观察者模式(发布订阅模式)
    • 策略模式   
    • 迭代器模式
    • 空对象模式
  •    创建型模式
    • 工厂模式  
    • 抽象工厂模式
    • 建造者模式

1. 门面模式

  门面模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。

为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。 

使用场景:

  (1) 为复杂的模块或子系统提供外界访问的模块;

  (2) 子系统相互独立;

  (3) 在层析结构中,可以使用外观模式定义系统的每一层的入口。

使用方法:

  参考: 、

   

2. 观察者模式

  观察者模式(Observer)就是在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新

其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。

微信工作号为  —— 主题/被观察者(Subject)

订阅者     ——  观察者(Observer)

 

使用场景:

  有一个微信公众号服务,不定时发布一些消息,关注公众号就可以收到推送消息,取消关注就收不到推送消息。

使用方法:

  参考:、

 

3. 策略模式

  策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,

从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。

 

  策略模式把一个系列的算法封装到一个系列的具体策略类里面,作为一个抽象策略类的子类或策略接口的实

现类。简单地说:准备一组算法,并将每一个算法封装起来,使它们可以互换。

使用场景:

  商城打折、会员vip

使用方法:

  参考: 、

 

4. 工厂模式

  工厂模式主要是为了解决接口选择的问题,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

使用场景:

  (1)日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方;

  (2)数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时;

使用方法:

  参考:  

 

5. 抽象工厂模式

  抽象工厂相当于一个超级工厂,是创造其他工厂的工厂。

使用场景:

使用方法

  

 

6. 组合模式

  用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。

使用场景:

  树形结构

使用方法:

  

 

7. 装饰器模式

  装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。

这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

使用场景: 

  (1) 扩展一个类的功能;

  (2) 动态增加功能,动态撤销;

使用方法:

  

 

8. 迭代器模式

  迭代器模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。该模式提供一种方法顺序

访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。一般情况,我们自己开发时很少自定义迭代器,

因为java本身已经把迭代器做到内部中了(比如:常用的list和set中都内置了迭代器)。当然,如果真有这种需

求需要我们自定义迭代器的话,可以参考jdk的迭代器实现方式来实现自己的迭代器。

使用场景:

  (1) 访问一个聚合对象的内容而无须暴露它的内部表示;

  (2) 需要为聚合对象提供多种遍历方式;

使用方法:

  

 

9. 建造者模式

  建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。

 

10. 空对象模式

  空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还

创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。

 

转载于:https://www.cnblogs.com/shiyun32/p/9661513.html

你可能感兴趣的文章
爬虫基础
查看>>
jquery.lazyload延迟加载图片第一屏问题
查看>>
HDU 1011 Starship Troopers (树形DP)
查看>>
手把手教你写DI_1_DI框架有什么?
查看>>
.net常见的一些面试题
查看>>
OGRE 源码编译方法
查看>>
上周热点回顾(10.20-10.26)
查看>>
C#正则表达式引发的CPU跑高问题以及解决方法
查看>>
云计算之路-阿里云上:“黑色30秒”走了,“黑色1秒”来了,真相也许大白了...
查看>>
APScheduler调度器
查看>>
设计模式——原型模式
查看>>
【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.1.CSS框架和其他功能
查看>>
如何一个pdf文件拆分为若干个pdf文件
查看>>
web.xml中listener、 filter、servlet 加载顺序及其详解
查看>>
前端chrome浏览器调试总结
查看>>
获取手机验证码修改
查看>>
数据库连接
查看>>
python中数据的变量和字符串的常用使用方法
查看>>
等价类划分进阶篇
查看>>
delphi.指针.PChar
查看>>