天下脸皮共十分
我占八分

设计模式笔记

简单工厂模式

静态工厂模式

区别

image-20210314215342064
  • 简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族 中最简单实用的模式
  • 简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)
  • 在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会 使用到工厂模式

工厂方法模式

对象的实例化推迟到子类中

image-20210314201335531

抽象工厂模式

image-20210314210306746

原型模式(prototype)

  • Prototype:原型类,声明一个克隆自己的接口,cloneable
  • Concreteprototype:具体的原型类,实现一个克隆自己的操作
  • Cint:让一个原型对象克隆自己,从而创建一个新的对象(属性一样)

浅拷贝

实现cloneable接口

引用类型为地址拷贝

深拷贝

利用序列化

字节输出流、对象输出流、字节输入流、对象输入流

应用

  1. spring的bean配置,scope选择prototype

建造者模式

  • 建造者模式( Builder Pattern)又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象
  • 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们 用户不需要知道内部的具体构建细节。

传统方式

image-20210315012127420

建造者模式

image-20210315012615436

建造者模式的注意事项和细节

  1. 客户端使用程序)不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象
  2. 每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象
  3. 可以更加精细地控制产品的创建过程。将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰也更方便使用程序来控制创建过程
  4. 增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭 原则”
  5. 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品乏间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制
  6. 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,因此在这种情况下,要考虑是否选择建造者模式
  7. 抽象工厂模式VS建造者模式
    • 抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不 同分类维度的产品组合,采用抽象工厂模式不需要关心构建过程,只关心什么产品由什么工厂生产即可。而建造者模式则是要求按照指定的蓝图建造产品,它的主要目的是通过组装零配件而产生一个新产品

适配器模式

类适配器

image-20210315230715003

对象适配器

image-20210315232359818

接口适配器

image-20210315233424141
  • 抽象类Adapter对接口进行空实现
  • 调用方通过匿名内部类的方式(子类)重写需要实现的接口的方法即可

应用

springmvc处理器适配器

image-20210315235705668

桥接模式

image-20210317214320174

实际应用

image-20210317222019831

常见应用场景

  • JDBC驱动程序
  • 银行转账系统
    • 转账分类:网上转账,柜台转账,AMT转账
    • 转账用户类型:普通用户,银卡用户,金卡用户
  • 消息管理
    • 消息类型:即时消息,延时消息
    • 消息分类:手机短信,邮件消息,QQ消息

桥接模式的注意事项和细节

  • 实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助于系统进行分层设计,从而产生更好的结构化系统。
  • 对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其它的部分由具体业务来完成。
  • 桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本
  • 桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程
  • 桥接模式要求正确识别出系统中两个独立变化的维度(抽象、和实现,因此其使用范围有一定的局限性,即需 要有这样的应用场景。

装饰者模式

组合模式

类图

image-20210322220022249

对原理结构图的说明-即(组合模式的角色及职责)

Component:这是组合中对象声明接口,在适当情況下,实现所有类共有的接口默认行为,用于访问和管理Component子部件,Component可以是抽象类或者接口 Leaf:在组合中表示叶子节点,叶子节点没有子节点 Composite:非叶子节点,用于存储子部件,在 Component接口中实现子部件的相关操作,比如增加(add),删除。

常见应用场景

hashmap

image-20210322224917606

组合模式的注意事项和细节

  • 简化客户端操作。客户端只需要面对一致的对象而不用考虑整体部分或者节点叶子的问题。
  • 具有较强的扩展性。当我们要更改组合对象时,我们只需要调整内部的层次关系,客户端不用做出任何改动
  • 方便创建出复杂的层次结构。客户端不用理会组合里面的组成细节,
  • 容易添加节点或者叶子从而创建出复杂的树形结构
  • 需要遍历组织机构,或者处理的对象具有树形结构时,非常适合使用组合模式
  • 要求较高的抽象性,如果节点和叶子有很多差异性的话,比如很多方法和属性都不一样,不适合使用组合模式
赞(5) 打赏
未经允许不得转载:Stephen Young » 设计模式笔记
分享到: 更多 (0)

相关推荐

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏