关于“结构型”设计模式的理解

结构型设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。

结构型不同于创建型的设计模式,我们已经通过创建型的模式做了一些能构建对象的组件,就好像我们已经能从不同的地方获取建造大楼的材料,钢筋、水泥、石材,接下来的最重要的工作,就是我们以怎样的形式去运用这些材料(对象),我是这样理解,设计模式本来就来源于建筑行业,但是能在软件行业这么流行,是基于我们可以想象的世界来构造的,既然如此,我们便能在生活中找到对应的应用模式。

话说如果能把软件中的概念用更通俗的语言来解释的话,可能入门者更容易理解些,我们总是讲依赖注入,松耦合,外行人一脸懵逼好吗,普及知识尽量易懂,希望我的设计模式也有后续的更容易理解的版本。

1,适配器模式

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能

这里我已经单独写过,请参考: https://mp.csdn.net/postedit/81315835

2, 桥接模式

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

定义一个接口,接口下面有多个实现类,然后在实现另外一个类,构造函数一个参数接受这个接口类型的实现。当调用时候这个类时,再传对应想要做的实现类,那么这个调用类所做的功能就是接口实现的这个传入实现类的所有功能。

比如我们就是要画一个形状(这个动作就是接口),基于这种接口有两种实现(画个圆,画个正方形),

再创建一个桥接类,这个类有个参数就是接受对应的实现。就像我们的工具盒,里面可以放任何类型的形状,放什么形状,就决定我们可以用什么形状。

当实例化这个桥接类的时候,我们给一个只用于画圆的实例化,那么我们在使用这个交接类的时候,画出来的形状就是圆形。

这个不是很难理解,桥接类就是用来连接抽象化与实现化的, 

优点: 1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。

缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

使用场景: 1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。 2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。 3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

注意事项:对于两个独立变化的维度,使用桥接模式再适合不过了。

3,过滤器模式

过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准

目前看起来实现查询功能,为了连接两个不同的属性的查询,一组对象中某个属性的检索。

如果有后续使用,再来更新。

4,组合模式

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式

二级结构,同一种类型下面包含很多同一种类型,比如组织结构中,雇员都是相同的属性,但是总经理下面是部门经理,部门经理下面是员工,这三角色的关联关系就是组合模式来设计的。

5,装饰器模式

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

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

装饰模式和桥接模式的区别:

两个模式都是为了解决过多子类对象问题。但他们的诱因不一样。桥接模式是对象自身现有机制沿着多个维度变化,装饰模式是为了增加新的功能

6,外观模式

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性

单看名字不是很好理解,其实就是一个充电器,你只看到到充电的接口,至于他内部的实现是什么样的,我并不知道,现在的充电器可以充手机,充手环,如果这个功能在内部是分发的,还是重合的,我们都不关心,只从这个接口上去调用。

7,享元模式

享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。

享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。

就是根据你传入的参数,当作hashmap的key存储,并实例化对应的对象,下次同样请求这种类型的动作,可以根据一样key值取到上次的对象,然后调用,减少内存多次创建对象,但是切记这种外部使用不能影响内部逻辑。

8,代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。

在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口

买火车票不一定在火车站买,也可以去代售点

注意事项: 1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值