下面说一下结构型模式:结构型模式是描述如何将类对象结合在一块儿,造成一个更大的结构,结构模式描述两种不一样的东西:类与类的实例。故能够分为类结构模式和对象结构模式。设计模式
在GoF设计模式中,结构型模式有:app
1.适配器模式 Adapter网站
2.桥接模式 Bridgespa
3.组合模式 Composite设计
4.装饰模式 Decorator代理
5.外观模式 Facade中间件
6.享元模式 Flyweight对象
7.代理模式 Proxy 继承
具体来讲:递归
适配器模式是将一个类的接口转换成客户但愿的另一个接口。适配器模式使得本来因为接口不兼容而不能一块儿工做的那些类能够一块儿工做。
两个成熟的类须要通讯,可是接口不一样,因为开闭原则,咱们不能去修改这两个类的接口,因此就须要一个适配器来完成衔接过程。
变压器就是很好的适配器模式的例子。用电设备所须要的电压是9V,可是电线上的电压倒是220V的,咱们不能去更改它们的电压输入或输出,因此咱们用到了变压器。变压器是220V的输入,9V的输出。这样就能够将200V的电压变为9V的电压,用变压器将用电设备链接到了电线上工做了。
上面两幅图中,都是Client端须要Request这个方法,可是Adaptee没有这个方法,因此就须要提供一个中间件/包装类(Wrapper)Adapter类来衔接。不一样的是第一幅图Adapter继承自Adaptee,而第二幅图是在Adapter类中包装了一个Adaptee的实例。这就决定了第一幅图讲的是“类的结构模式”,而第二幅图则是“对象的结构模式”。
桥接模式将抽象部分与它的实现部分分离,是它们均可以独立地变化。它很好的支持了开闭原则和组合锯和复用原则。实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这些多角度分离出来让他们独立变化,减小他们之间的耦合。
2个相互耦合的系列,每一个系列都有各自的产品变更。将这2个系列抽象成2个角色类,将各自的变化封装到对象的角色类中,而后再将2个角色类之间用组合的关系表示,这样就大大简化了使用类继承的复杂性,逻辑变得清晰了,易于扩展和维护。
桥接模式封装了变化,完成了解耦,实现了弱耦合。
组合模式将对象组合成树形结构以表示部分-总体的层次结构,组合模式使得用户对单个对象和组合对象的使用具备一致性。就像“放羊娃的故事”同样(放羊—赚钱—娶妻---生娃—放羊…)。
廊坊师范学院=14个二级学院+院长、副院长;每个二级学院=多个专业+二级学院院长、副院长;每个专业有学生+班委。大学院能够增删二级学院和副院长,二级学院的结构跟大学院几乎同样,因此也能够增删专业和副院长。虽然结构复杂,可是操做简单,只须要进行简单的递归调用便可。
装饰模式动态地给一个对象添加一些额外的职责,就增长功能来讲,它比生成子类更灵活。也能够这样说,装饰模式把复杂类中的核心职责和装饰功能区分开了,这样既简化了复杂类,有去除了相关类中重复的装饰逻辑。装饰模式没有经过继承原有类来扩展功能,但却达到了同样的目的,并且比继承更加灵活,因此能够说装饰模式是继承关系的一种替代方案。
孙悟空有72变,每一变均可以给他带来一个附加功能,变成鱼能够在水下呼吸,变成鸟能够在天上飞翔。这就是典型的装饰模式。
装饰模式解耦了核心和装饰功能,锁业也是强调了松耦合。
外观模式为子系统中的一组接口提供了赞成的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式中,客户对各个具体的子系统是不了解的,因此对这些子系统进行了封装,对外只提供了用户所明白的单一而简单的接口,用户直接使用这个接口就能够完成操做,而不用去理睬具体的过程,并且子系统的变化不会影响到用户,这样就作到了信息隐蔽。
这就至关于新生接待员。新生对入学流程不清楚,可是接待员学长但是明白的。学生跟着接待员就能够把各个手续办理完毕了。
享元模式为运用共享技术有效的支持大量细粒度的对象。由于它能够经过共享大幅度地减小单个实例的数目,避免了大量很是类似类的开销。.
享元模式是一个类别的多个对象共享这个类别的一个对象,而不是各自再实例化各自的对象。这样就达到了节省内存的目的。
为其余对象提供一种代理,并由代理对象控制对原对象的引用,以间接控制对原对象的访问。
咱们想上外国的网站,可是国家给限制了,因此咱们就须要一个能够登陆到外国网站的ip,经过链接到这个ip,再经过这个ip去访问外国网站。
代理的客户对象没法直接访问目标对象,代理对象提供对单独目标对象的访问控制,而外观模式的客户对象能够直接访问子系统中的各个对象,但一般由外观对象提供对子系统个元件功能的简化的共同层次的调用接口。
两者都属于一种衔接性质的功能。代理对象和被代理对象的接口是同一个,可是客户无法直接访问被代理者,只能经过代理对象去完成被代理对象的访问。而适配器模式是将多个子系统封装起来,提供一个统一的外部接口,客户只须要使用这个外部接口便可访问对象的子系统了。
两者都是对显存系统的封装。外观模式定义了一个新的接口,而适配器则是复用了一个原有的接口;适配器是用来适配对象的,而外观则是用来适配整个子系统的。