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

结构型模式

1.代理模式

1.1 静态代理

在这里插入图片描述

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

代码:
在这里插入图片描述
在这里插入图片描述
有的同学看了这个模式之后,就觉得非常的麻烦。有的同学可能会觉得播放正片之前的广告和之后的广告我们可以直接写到我们的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(){
		ReturnChina 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. 桥接模式

在这里插入图片描述
将继承关系转换为关联关系,降低了耦合,将抽象和实现解耦,使得两者可以独立的变化。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Studying_swz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值