亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Java設計模式(7)----------橋接模式

標簽:
Java
1、介绍

桥接模式是一种结构型的设计模式,主要是特点是将抽象部分与实现部分分离开来,从而能够进行独自的变化。在桥接模式中,所谓的桥,个人理解是在抽象层中,将接口联系到一个抽象类中,更确切的说,是依赖关系。桥接模式主要适用场景是,某个对象需要从两个或者多个(一般是两个)维度进行描述或者操作的时候,能够简洁的进行处理。

特点:抽象与实现分离。抽象层依赖,具有非常好的扩展性。

适用场景:当场景中某个事物需要从两个或者多个维度进行描述或者操作。

2、案例
2.1、情景

举一个在饭店(抽象类)吃饭(动作接口)的例子。我们可以选择在香格里拉(具体类)吃饭,也可以在希尔顿(具体类)吃饭。两个酒店都可以提供烤肉(吃烤肉,动作接口实现类)和沙拉(吃沙拉,动作接口实现类)。我们的操作或者描述的问题,就是在什么酒店吃什么的问题。很显然,这是一个2维度的选择组合的动作,那么就可以通过桥接模式的思路来进行实现。

对应的UML类图如下:

图片描述

2.2、实现

1)吃饭接口

public interface EatFood
{
    String eat();
}

2)吃饭实现类

public class EatMeat implements EatFood
{
    @Override
    public String eat()
    {
        return "烤肉";
    }
}
public class EatSalad implements EatFood
{
    @Override
    public String eat()
    {
        return "沙拉";
    }
}

3)餐厅抽象类

public abstract class Restaurant
{
    protected EatFood eatFood;

    public Restaurant(EatFood eatFood)
    {
        this.eatFood = eatFood;
    }
    public abstract String action();
}

4)餐厅实体类

public class ShangriLa extends Restaurant
{
    public ShangriLa(EatFood eatFood)
    {
        super(eatFood);
    }

    @Override
    public String action()
    {
        return "在香格里拉酒店吃" + eatFood.eat();
    }
}
public class Healton extends Restaurant
{
    public Healton(EatFood eatFood)
    {
        super(eatFood);
    }

    @Override
    public String action()
    {
        return "在希尔顿酒店吃" + eatFood.eat();
    }
}

5)验证程序

/**
 * 验证
 */
public class Demo
{
    public static void main(String[] args)
    {
        Restaurant restaurant = new ShangriLa(new EatMeat());
        System.out.println(restaurant.action());

        Restaurant restaurant1 = new Healton(new EatSalad());
        System.out.println(restaurant1.action());
    }
}

6)运行结果

在香格里拉酒店吃烤肉
在希尔顿酒店吃沙拉

Process finished with exit code 0

3、总结
3.1、与抽象工厂的异同

上文讲到,桥接模式的适用场景是需要从两个或者多个维度去描述或者操作事物。而抽象工厂模式也与“多个维度”相关。这两种模式的适用场景都是涉及多维度的。但是是存在区别的,抽象工厂模式更关注对象的创建,是创建型设计模式。而桥接模式则是关注对象创建之后的动作或者功能。所以两者的区别是比较明显的。

3.2、桥接模式特点

桥接模式的特点是将抽象与实现分离,在抽象层建立依赖关系,从而两个维度上的实现类可以进行各自的变化不会相互影响,具有非常好的扩展性。

點擊查看更多內容
5人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
1萬
獲贊與收藏
1426

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消