设计模式2-结构性

桥接模式--二维组合关系时

  将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度

  桥接模式本来就是合成复用原则的具体落地

  装饰是小的包裹大的,桥接是大的包裹小的

装饰者模式是主体与附加功能的解耦,桥接是抽象与具体的解耦

桥接模式中用户使用的最终对象还是自己,只不过属性是可变的。装饰者模式中,用户使用的对象因为功能的变化,对象也一直在变。侧重点不一样

代理:组合增强,适配器:接口转换兼容,装饰者:聚合增强,桥接:取代继承。我理解的

装饰者模式和桥接模式结构好像啊  --- 弹幕

?? 装饰是家族内,桥接是两个家族聚合,一个家族调用另一个家族

装饰模式只有一个维度

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

外观模式-- 多个子系统----------全组合在外观类里--不管是否同一家族----------------一个子系统也算------

  又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问 的模式。

  该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降 低应用程序的复杂度,提高了程序的可维护性。

  外观(Facade)模式是“迪米特法则”的典型应用

 

代理模式代理类和代理对象存在父子或者兄弟关系,外观模式是聚合关系

和代理不一样,代理你是访问不到被代理类的

代理模式没有继承,都是实现接口

和代理模式不像的,代理模式是需要被代理人自己也参与工作的,外观模式完全由中间人把活全干了

就是service里面有很多mapper或者controller里面有几个service

 

应用

  使用tomcat作为web容器时,接收浏览器发送过来的请求,tomcat会将请求信息封装成 ServletRequest对象--------RequestFacade

image

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

组合模式----- 树根 树枝 树叶 ----树枝继承树 又组成list<树>  ---------- 为树形结构而生

  又名部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对 象,用来表示部分以及整体层次。

  这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

image

 

根据抽象构件类的定义形式,我们可将组合模式分为透明组合模式和安全组合模式 两种形式。

  透明组合模式 透明组合模式中,抽象根节点角色中声明了所有用于管理成员对象的方法,比如在示例中 MenuComponent 声明了 add 、 remove 、 getChild 方法,

这样做的好处是确保所有的构件 类都有相同的接口。透明组合模式也是组合模式的标准形式。

透明组合模式的缺点是不够安全,因为叶子对象和容器对象在本质上是有区别的,叶子对象不可能 有下一个层次的对象,即不可能包含成员对象,

因此为其提供 add()、remove() 等方法是没有 意义的,这在编译阶段不会出错,但在运行阶段如果调用这些方法可能会出错(如果没有提供相应 的错误处理代码)

  安全组合模式 在安全组合模式中,在抽象构件角色中没有声明任何用于管理成员对象的方法,而是在树枝节点 Menu 类中声明并实现这些方法。

安全组合模式的缺点是不够透明,因为叶子构件和容器构件具 有不同的方法,且容器构件中那些用于管理成员对象的方法没有在抽象构件类中定义

,因此客户端 不能完全针对抽象编程,必须有区别地对待叶子构件和容器构件

 

用聚合实现了树形结构

  组合模式为树形结构的面向对象实现提供了一种灵活的解决方案,通过叶子节点和树枝节点的递归 组合,可以形成复杂的树形结构,但对树形结构的控制却非常简单。

组合模式正是应树形结构而生,所以组合模式的使用场景就是出现树形结构的地方。比如:文件目录显 示,多级目录呈现等树形结构数据的操作

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 享元模式------------ 享元工厂

  享元(Flyweight )模式中存在以下两种状态:

  1. 内部状态,即不会随着环境的改变而改变的可共享部分。

  2. 外部状态,指随环境改变而改变的不可以共享的部分。享元模式的实现要领就是区分应用中的这两 种状态,并将外部状态外部化

image

 单例+工厂?

image

 

JUC / 数据库连接池/线程池

这里的重点是共享,而不是创建,工厂模式没有共享的功能

理论上用工厂用原型都能实现 但是用享元要的就是节省内存的效果

不可以但是可以用抽象工厂模式,但是会类爆炸,因为每个颜色的形状都要写一种实现

 

包装类 Integer

0-127是共享的,127后的转化会造对象

因为-128到127容易频繁使用。共享部分

 

 

 

 

 

 

posted on 2026-03-15 22:37  daofree  阅读(0)  评论(0)    收藏  举报