设计模式之桥接模式,电脑与游戏的关系

前言

本文主要讲述桥接模式,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。

一.什么是桥接模式

桥接模式是23种设计模式中结构型模式的一种,将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变,来实现两者的解耦,并保持各部分的独立性以及他们的功能扩展。

二.生活中的桥接模式

1.电脑与游戏

在咱们使用的电脑里,有分为台式电脑、笔记本电脑、平板电脑。而我们在不同电脑上可以又可以玩相同的游戏,未来电脑可能会有其他类型的电脑,而游戏也会更新迭代,电脑与游戏的关系就像桥接模式一样,独立发展但是又能合结合起来。
在这里插入图片描述

2.手机与软件

咱们现在的手机有各种各样的手机,软件也是有各种各样的软件,不同的软件可以同时存在一部手机里,不同的手机也可以存在相同的软件,软件和手机也是咱们接下来要说的桥接模式一样,独立发展但是又能结合起来。

3.车型与品牌

现在的汽车比以前更加的多样化了,以前只有柴油车和汽油车,现在不仅有纯电车还有混动车,或许发展到以后可能会出现太阳能汽车。而车的品牌也比以前越来越多了,而不同品牌的车存在不同车型的车,相同车型的车也有不同的品牌。车的品牌和车型之间的关系就像桥接模式一样,两个分开独立的维度而又能够结合起来。

三.桥接模式的实现

接下来我们以电脑和游戏之间关系的案例,通过桥接模式来实现。首先创建一个实现类接口角色电脑游戏接口和两个具体实现类角色游戏类

package com.qianfeng.ran;

/*
 * @author:江帅
 *      实现类接口
 *          电脑游戏接口
 */
public interface ComputerGame {
    
    
    /**
     *  被下载的行为      --  供抽象实现角色调用
     * @param computer 具体的电脑类型
     */
    void beDownload(String computer);
}



/*
 * @author:江帅
 *      具体实现化角色
 *          Dota2 游戏类
 */
class DOTA2 implements ComputerGame{
    
    

    @Override
    public void beDownload(String computer) {
    
    
        System.out.println("使用"+computer+"玩 Dota2");
    }
}



/*
 * @author:江帅
 *      具体实现化角色
 *          LOL 游戏类
 */
class LOL implements ComputerGame{
    
    
    @Override
    public void beDownload(String computer) {
    
    
        System.out.println("使用"+computer+"玩 LOL");
    }
}

接下来创建抽象化类电脑类和抽象化实现类具体型号的电脑类

package com.qianfeng.ran;

/*
 * @author:江帅
 *      抽象化类
 *          电脑类
 */
public abstract class Computer {
    
    
    //游戏类对象
    public ComputerGame computerGame;
    public void setComputerGame(ComputerGame computerGame) {
    
    
        this.computerGame = computerGame;
    }
    /**
     * 玩游戏行为
     */
    public abstract void playGame();
}



/*
 * @author:江帅
 *      抽象化实现类
 *          台式电脑类
 */
class DesktopComputer extends Computer{
    
    
    @Override
    public void playGame() {
    
    
        //下载游戏
        computerGame.beDownload("台式电脑");
    }
}



/*
 * @author:江帅
 *      抽象化实现类
 *          笔记本电脑类
 */
class LaptopComputer extends Computer {
    
    
    @Override
    public void playGame() {
    
    
        //下载游戏
        computerGame.beDownload("笔记本电脑");
    }
}

最后通过桥接模式实现不同型号的电脑上玩不同的游戏

package com.qianfeng.ran.;

/*
 * @author:江帅
 *          客户端
 */
public class Demo {
    
    
    public static void main(String[] args) {
    
    
        //创建 DOTA2 游戏对象
        ComputerGame dota2 = new DOTA2();
        //创建 LOL 游戏对象
        ComputerGame lol = new LOL();

        //--------------使用台式电脑玩dota2-------
        //创建台式电脑对象
        Computer computer = new DesktopComputer();
        //下载游戏		--		台式电脑对象添加 DOTA2 游戏对象
        computer.setComputerGame(dota2);
        //执行结果:
        //使用台式电脑玩 Dota2
        computer.playGame();

        //--------------使用台式电脑玩lol-------
        //下载游戏		--		台式电脑对象添加 LOL 游戏对象
        computer.setComputerGame(lol);
        //执行结果:
        //使用台式电脑玩 LOL
        computer.playGame();

        //--------------使用笔记本电脑玩dota2-------
        //创建笔记本电脑
        computer = new LaptopComputer();
        //下载游戏		--		笔记本电脑对象添加 DOTA2 游戏对象
        computer.setComputerGame(dota2);
        //执行结果:
        //使用笔记本电脑玩 Dota2
        computer.playGame();

        //--------------使用笔记本电脑玩lol-------
        //下载游戏		--		笔记本电脑对象添加 LOL 游戏对象
        computer.setComputerGame(lol);
        //执行结果:
        //使用笔记本电脑玩 LOL
        computer.playGame();
    }
}

四.总结

桥接模式适用于一个类存在两个独立变化的维度,且这两个维度都需要进行扩展并且不通过继承的方式扩展时使用。

减少了子类的产生,降低了管理和维护的成本。但是会增加系统的设计难度,需要很好地识别两个独立维度的变化。

下一章,我们将带大家学习新能源的发展(设计模式之适配器模式)


猜你喜欢

转载自blog.csdn.net/GUDUzhongliang/article/details/131303545