设计模式总结(二):结构型模式

简介: 设计模式总结(二):结构型模式

1.代理模式

1.1 静态代理

  1. 用户只关心接口功能,而不在乎谁提供了功能。上图中接口是 Subject
  2. 接口真正实现者是上图的 RealSubject,但是它不与用户直接接触,而是通过代理。
  3. 代理就是上图中的 Proxy,由于它实现了Subject接口,所以它能够直接与用户接触。
  4. 用户调用 Proxy 的时候,Proxy 内部调用了 RealSubject。所以,Proxy 是中介者,它可以增强 RealSubject 操作。
  5. 代码:

有的同学看了这个模式之后,就觉得非常的麻烦。有的同学可能会觉得播放正片之前的广告和之后的广告我们可以直接写到我们的ZhanlangMovie的play方法中。我们想一下,现在只有一个电影,就是战狼。如果我们有100个呢?是不是就是要复制100次。如果我们复制了过去的这些逻辑,需要变更的时候怎么办,是不是我们要改100次。并且加入说你这个ZhanlangMovie是第三方公司给你提供的包里面的类,这些包里面的类都是class文件,你手里面没有源代码,那怎么办。

比如我们上面的代码,我们可以看到用了代理模式之后,我们可以在不改动原有逻辑的条件下,扩展我们的逻辑。

1.2 动态代理

静态代理会让类变多了,多了代理类,工作量变大了,且不易扩展。比如我们上节课的例子,你要实现不同的扩展方法就要编写不同的代理类,非常麻烦。


Proxy提供了用于创建动态代理类和代理对象的静态方法,它也是所有动态代理类的父类。如果在程序中为一个或多个接口动态生成实现类,就可以使用 Proxy 来创建动态代理类。如果需要为一个或多个接口动态地创建实例,也可以使 Proxy 来创建动态代理实例。

2.装饰器模式

装饰器模式是在原有类的基础上动态添加新的功能,这种添加功能的方式不同于继承,它是在对象层面实现功能扩展(关联对象),而不是继承的类层面,因此说装饰器模式比继承更加灵活。另外,装饰器模式属于结构型设计模式。之前讲的都是创建型设计模式。创建型可以理解为生成新的对象,而结构型可以理解为构建更大的类或类对象。

实例:https://www.cnblogs.com/yssjun/p/11110013.html

简单来说,就是在之前对象的功能的基础上,不断添加新的功能,完成一种不断扩充功能的需求,不需要改变原有的类。

3.适配器模式

定义:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法工作在一起的两个类能够在一起工作。不会改变原来的方法。

差别:差别在静态代理是代理和被代理类实现同一个接口,而适配器中的适配器实现一个接口、被适配的类是单独的一个类。

代码:

Public  class AdapterPattern{
  Public static void main(String[] args){
    New Adapter(new Speaker()).translate();
  } 
}
Class Speaker{
  public String speak(){
    Return “China No.1”;
  }
}
Interface Translate{
  Public String translate();
}
Class Adapter implements translate{
  private Speaker speaker;
  Public Adapter(Speaker speaker){
    This.speaker = speaker;
  }
  Public translate(){
    String result = speaker.speak();
    *****
    Return result;
  }
}

4.外观模式

缺点:不符合开闭原则。

5. 享元模式

最典型的技术:池技术。

优缺点:

大大节约系统资源,外部状态相对独立,不会影响内部状态。而因为分离出内外状态,状态逻辑比较复杂

6. 组合模式

7. 桥接模式

将继承关系转换为关联关系,降低了耦合,将抽象和实现解耦,使得两者可以独立的变化。

目录
相关文章
|
1月前
|
设计模式 存储 缓存
【设计模式】【结构型模式】享元模式(Flyweight)
一、入门 什么是享元模式? 享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享对象来减少内存使用,特别适用于存在大量相似对象的情况。 它的核心思想是将对象的内在状态(不变
73 16
|
1月前
|
设计模式 Java 数据库连接
【设计模式】【结构型模式】代理模式(Proxy)
一、入门 什么是代理模式? 代理模式(Proxy Pattern)是一种结构型设计模式,允许你提供一个代理对象来控制对另一个对象的访问。 代理对象在客户端和目标对象之间起到中介作用,可以在不改变目标对
61 10
|
1月前
|
设计模式 Java 定位技术
【设计模式】【结构型模式】组合模式(Composite)
一、入门 什么是组合模式 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次关系。组合模式使得客户端可以统一处理单个对象和组合对
61 10
|
1月前
|
设计模式 Java 数据库连接
【设计模式】【结构型模式】外观模式(Facde)
一、入门 什么是外观模式? 一种结构型设计模式,通过为子系统中的一组接口提供一个统一的高层接口(称为外观),来简化客户端与复杂子系统的交互过程。其本质是建立抽象层来隔离复杂度。 为什么要有外观模式?
61 9
|
1月前
|
关系型数据库 Java MySQL
【设计模式】【结构型模式】桥接模式(Bridge)
一、入门 什么是桥接模式? 桥接模式(Bridge Pattern)是一种结构型设计模式,核心思想是将抽象与实现分离,让它们可以独立变化。简单来说,它像一座“桥”连接了两个维度的变化,避免用继承导致代
122 10
|
1月前
|
设计模式 前端开发 Java
【设计模式】【结构型模式】适配器模式(Adpter)
一、入门 什么是适配器模式? 适配器模式是Java中常用的结构型设计模式,它的核心作用就像现实中的电源转换器一样---让原本不兼容的两个接口能够协同工作。 为什么要用适配器模式? 假设我们需要在电商系
68 10
|
1月前
|
设计模式 缓存 安全
【设计模式】【结构型模式】装饰者模式(Decorator)
一、入门 什么是装饰者模式? 装饰者模式(Decorator Pattern)是 Java 中常用的结构型设计模式,它能在不修改原有对象结构的前提下,动态地为对象添加额外的职责。 为什么要装饰者模式?
44 8
|
设计模式 存储 安全
Java设计模式---结构型模式
Java设计模式---结构型模式
|
10月前
|
设计模式 存储 Java
【九】设计模式~~~结构型模式~~~外观模式(Java)
文章详细介绍了外观模式(Facade Pattern),这是一种对象结构型模式,通过引入一个外观类来简化客户端与多个子系统之间的交互,降低系统的耦合度,并提供一个统一的高层接口来使用子系统。通过文件加密模块的实例,展示了外观模式的动机、定义、结构、优点、缺点以及适用场景,并讨论了如何通过引入抽象外观类来提高系统的可扩展性。
【九】设计模式~~~结构型模式~~~外观模式(Java)
|
10月前
|
设计模式 Java
【八】设计模式~~~结构型模式~~~装饰模式(Java)
文章详细介绍了装饰模式(Decorator Pattern),这是一种对象结构型模式,用于在不使用继承的情况下动态地给对象添加额外的职责。装饰模式通过关联机制,使用装饰器类来包装原有对象,并在运行时通过组合的方式扩展对象的行为。文章通过图形界面构件库的设计案例,展示了装饰模式的动机、定义、结构、优点、缺点以及适用场景,并提供了Java代码实现和应用示例。装饰模式提高了系统的灵活性和可扩展性,适用于需要动态、透明地扩展对象功能的情况。
【八】设计模式~~~结构型模式~~~装饰模式(Java)

热门文章

最新文章