首页 > 其他分享 >设计模式总结(二):结构型模式

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

时间:2024-08-29 21:24:08浏览次数:5  
标签:总结 代理 接口 speaker Proxy 模式 设计模式 Public 结构型

@TOC

结构型模式

1.代理模式

1.1 静态代理

设计模式总结(二):结构型模式_装饰器模式

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

代码:

设计模式总结(二):结构型模式_动态代理_02

设计模式总结(二):结构型模式_动态代理_03

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

1.2 动态代理

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

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

2.装饰器模式

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

设计模式总结(二):结构型模式_装饰器模式_04

设计模式总结(二):结构型模式_动态代理_05

实例:https://www.cnblogs.com/yssjun/p/11110013.html简单来说,就是在之前对象的功能的基础上,不断添加新的功能,完成一种不断扩充功能的需求,不需要改变原有的类。

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

3.适配器模式

设计模式总结(二):结构型模式_动态代理_07

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

设计模式总结(二):结构型模式_装饰器模式_08

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

代码:

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.外观模式

设计模式总结(二):结构型模式_装饰器模式_09

设计模式总结(二):结构型模式_装饰器模式_10

设计模式总结(二):结构型模式_装饰器模式_11

缺点:不符合开闭原则。

设计模式总结(二):结构型模式_装饰器模式_12

5. 享元模式

设计模式总结(二):结构型模式_动态代理_13

设计模式总结(二):结构型模式_动态代理_14

最典型的技术:池技术。

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

设计模式总结(二):结构型模式_动态代理_16

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

设计模式总结(二):结构型模式_装饰器模式_18

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

6. 组合模式

设计模式总结(二):结构型模式_动态代理_19

设计模式总结(二):结构型模式_动态代理_20

设计模式总结(二):结构型模式_动态代理_21

设计模式总结(二):结构型模式_动态代理_22

设计模式总结(二):结构型模式_装饰器模式_23

7. 桥接模式

设计模式总结(二):结构型模式_动态代理_24

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

设计模式总结(二):结构型模式_装饰器模式_25

标签:总结,代理,接口,speaker,Proxy,模式,设计模式,Public,结构型
From: https://blog.51cto.com/u_12518291/11869855

相关文章

  • 阿里云服务器部署Sonic总结
    1.购买阿里云服务器访问阿里云官网,选择合适的云服务器购买购买成功后创建ECS云服务器下载AlibabaCloudClient创建AccessKey并保存打开AlibabaCloudClient,添加账号2.安装docker选择操作—>启动远程连接(SSH)snapinstalldockerdocker-vdocker-compose-v3.......
  • PbootCMS网站常见错误提示总结
    一些初涉相关领域的新朋友在进行pbootcms的安装过程中,往往会频繁遭遇一些错误状况。接下来,为您详细罗列pbootcms于后台抑或前台所呈现出的各类问题以及相应的解决办法。 1、Parseerror:syntaxerror,unexpected':',expecting'{'inwww\core\function\handle.phpon......
  • 总结24个Python接单赚钱的平台,总有适合你的,兼职月入5000+
    这里为大家整理了24个Python接私活的平台,另外还有一些接私活的注意事项。当然这些平台不止Python语言能接单,事实上基本所有语言都能找到合适的单子~温馨提示:1.没有第三方担保的个人单,风险较大尽量少接2.无需求文档,讲不清具体需求的不接3.没有预付的不做,结款方式按442的方式......
  • 设计模式--享元模式
    享元模式(FlyweightPattern)是一种结构型设计模式,其主要目的是通过共享对象来有效地支持大量细粒度的对象,从而节省内存和提高性能。它特别适用于需要大量相似对象的情况,这些对象之间共享一些公共状态或数据。享元模式的关键概念享元(Flyweight):享元模式中的对象,这些对象可以共......
  • 【问题总结】Garmin路线无法同步和地图坐标偏移的解决过程
          在GarminConnectAPP或网页上面自己创建的路线(不是通过已经跑过或骑行的历史记录另存的线路),同步到设备时提示不支持(无兼容设备),历史记录另存的路线如果进行了标注等修改,也会出现同样的无法同步问题。联系客服了解并从网上查阅资料,说是在GarminConnect网页版上使用......
  • 两年工控心得总结
    说在前面的话受限于浅薄的见识,许多的经历和结论并不能代表总体情况,仅供记录和参考,笔者就是个菜鸟,大佬轻喷.工作前背景双非本科机械设计制造及其自动化专业零c#基础工作公司概况定性:非标自动化设备供应商经营范围:3C电子产品类产线客户群体:手机厂商及其代......
  • 图神经网络知识总结——归一化
    本文以GraphWaveNet为主体,总结其使用到的(图)神经网络知识点以及相应代码实现方式。对称归一化邻接矩阵介绍对称归一化邻接矩阵(Symmetricallynormalizeadjacencymatrix),更适合无向图。作用将邻接矩阵归一化处理,使得每一行/列的和等于1(类比“数独”游戏),同时保持矩阵的对称......
  • C++ 设计模式——桥接模式
    C++设计模式——桥接模式C++设计模式——桥接模式1.主要组成成分2.逐步构建桥接模式步骤1:创建实现接口步骤2:实现具体实现类步骤3:创建抽象类步骤4:实现扩展抽象类步骤5:客户端使用3.桥接模式UML图UML图解析4.桥接模式的优点5.桥接模式的缺点6.桥接模......
  • wpf prism用法总结
    1、App文件中RegisterTypes方法:此方法中主要是注册、绑定视图、实体的。使用RegisterForNavigation方法,可以将视图注册成导航,且绑定对应的viewmodel,视图被调用后自动绑定这个viewmodel。注册成导航后,相当于公开了此视图允许调用。同时同一个视图可以绑定多个viewmodel。......
  • 2024年睿抗机器人大赛智能侦查省赛(预选赛)总结中篇
    2024年睿抗机器人大赛智能侦查省赛(预选赛)总结中篇引言通过上篇的分析,我们已经完成了睿抗机器人大赛省赛任务书的前两个部分,关于如何在win11下搭建yolov5环境并将其运用,后续我们会继续跟进,也欢迎大家留言,现在我们将继续分析省赛任务书余下的部分。任务3:ROS程序题任务描述......