设计模式总结(2)———结构型模式

本文介绍了适配器模式、桥接模式、组合模式等七种设计模式,并详细解释了每种模式的应用场景及其实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、适配器模式
适配器模式将一个借口转化为客户希望的另一个接口,从而使借口不兼容的类可以一起工作。

2、桥接模式
桥接模式将实现和抽象分离,使他们都可以独立变化
首先,如果不使用桥接模式,写出代码要适应两个方面的变化,抽象变化和实现变化都会导致代码的变化。比如说描述不同车走在不同路面上,可以形成如下架构:
这里写图片描述

显然,如果路的类型增加修改,会新增很多代码,而且很多是重复的,应用桥接模式如下:
这里写图片描述
显然,在这里,客户端需要同时和abstractroad和abstractcar相互耦合。这可以用创建类模式解决。

3、组合模式
通过组合多个对象形成树形结构。在一个模式对于单个的对象和容器对象的使用具有一致性。
在组合模式中,容器对象和叶子对象进行递归组合,使用户在使用过程中无需区分,可以对他们进行一致的处理。
这里写图片描述

4、装饰模式
装饰模式是一种对象结构型模式,可以给一个动态对象增加额外的职责,就增加对象功能而说,装饰模式比生成子类更加灵活
比如说星巴克提供咖啡,不同种类的咖啡还可以添加一到多种不同种类配料,但是种类实在太多,这时候如果使用类的继承,就会产生类爆炸的结果。
可以采用如下架构
这里写图片描述
客户端调用代码如下

public class StarbuzzCoffee {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Beverage beverage = new Espresso();
        System.out.println(beverage.getDescription() + " $" + beverage.cost());

        Beverage beverage2 = new DarkRoast();
        beverage2 = new Mocha(beverage2);
        beverage2 = new Mocha(beverage2);
        beverage2 = new Whip(beverage2);
        System.out.println(beverage2.getDescription() + " $" + beverage2.cost());  
    }

}

装饰者模式是一个非常聪明的设计,装饰者类继承于饮料类,却将饮料类的对象作为自己的数据成员,实现了对饮料类的对象的封装,可以对其进行修改。

5、代理模式
代理模式就是利用第三者,连接客户端和目标对象,减少客户端和对象之间的耦合
这里写图片描述

6、外观模式
适配器模式的目的在于解决接口都不兼容的问题,而外观模式的目的在于简化接口
这里写图片描述
在上图所示架构中,将诸多功能封装在一个简单的类中,统一对外提供简明的功能

7、享元模式
享元模式就是系统共享技术有效地支持大亮粗粒度对象的复用,适用于系统使用少量对象,且比较相似,状态变化小
内部状态:在享元内部不随外界环境改变的共享部分,存储在享元对象内部
外部状态:随着环境而改变,不能够共享,应该由客户端负责
享元类的核心在于享元工厂类,它创建了一个存储享元对象的享元池,用户需要是可以从中获取。
这里写图片描述
如图所示,调用享元对象的外部状态需要客户手动传入参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值