GoF23种设计模式之结构型模式之桥接模式

一、概述
        将类的抽象部分与实现分部分离开来,使它们都可以独立地变化。
二、适用性
1.你不希望在抽象和实现之间有一个固定的绑定关系的时候。例如:在程序运行时实现部分应可以被选择或切换。
2.类的抽象以及实现都应该可以通过生成子类的方法加以扩充的时候。桥接模式使你可以对不同的抽象接口和实现进行组合,并且分别对它们进行扩充。
3.对一个抽象的实现部分的修改应对客户不产生影响的时候,即客户的代码不必重新编译。
4.你必须将一个对象分解成两个部分的时候。
5.你想在多个对象间共享实现(可能使用引用计数),但是同时要求客户并不知情的时候。
三、参与者
1.Abstraction:定义抽象类的接口。维护一个指向Implementor类型对象的指针。
2.RefinedAbstraction:扩充由Abstraction定义的接口。
3.Implementor:定义实现类的接口。该接口不一定要与Abstraction接口完全一致。事实上可以完全不同。一般而言,Implementor接口提供基本操作,而Abstraction接口提供较高层次操作。
4.ConcreteImplementor:实现Implementor接口,并且定义它的具体实现。
四、类图

五、示例
Abstraction
package cn.lynn.bridge;

public abstract class Player {

    private Equipment equipment;

    private String gender;

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Equipment getEquipment() {
        return equipment;
    }

    protected abstract void buyEquipment();
}
RefinedAbstraction
package cn.lynn.bridge;

public class MalePlayer extends Player {

    public MalePlayer() {
        super.setGender("男性玩家");
    }

    @Override
    public void buyEquipment() {
        super.getEquipment().playerBuyEquipment(this);
    }

}
package cn.lynn.bridge;

public class FemalePlayer extends Player {

    public FemalePlayer() {
        super.setGender("女性玩家");
    }

    @Override
    public void buyEquipment() {
        super.getEquipment().playerBuyEquipment(this);
    }

}
Implementor
package cn.lynn.bridge;

public abstract class Equipment {

    protected abstract void playerBuyEquipment(Player player);

}
ConcreteImplementor
package cn.lynn.bridge;

public class Arms extends Equipment {

    @Override
    public void playerBuyEquipment(Player player) {
        System.out.println(player.getGender() + "购买武器装备!");
    }

}
package cn.lynn.bridge;

public class Armour extends Equipment {

    @Override
    public void playerBuyEquipment(Player player) {
        System.out.println(player.getGender() + "购买铠甲装备!");
    }

}
Client
package cn.lynn.bridge;

public class Client {

    public static void main(String[] args) {
        Player malePlayer = new MalePlayer();
        Player femalePlayer = new FemalePlayer();
        Equipment arms = new Arms();
        arms.playerBuyEquipment(malePlayer);
        arms.playerBuyEquipment(femalePlayer);
        Equipment armour = new Armour();
        armour.playerBuyEquipment(malePlayer);
        armour.playerBuyEquipment(femalePlayer);
    }

}
Result
男性玩家购买武器装备!
女性玩家购买武器装备!
男性玩家购买铠甲装备!
女性玩家购买铠甲装备!
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 设计模式是软件开发中常用的一种解决方案,它们是一些经过实践验证的可复用设计思想。设计模式允许开发人员在类和对象的结构上灵活地更改,并提供了一种优雅的解决方案来应对各种软件开发问题。 GOF(Gang of Four)是指Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位软件工程师,他们在《设计模式:可复用面向对象软件的基础》一书中总结了23种常见的设计模式,这本书因此而获得了“设计模式圣经”的称号。 这本书以案例为基础,深入浅出地讲解了每个设计模式的原理和应用场景,并提供了C++实现源码。 其中,创建型设计模式包括单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。这些模式都提供了一种方式来创建对象,使得程序在实例化对象时更加灵活和可扩展。 结构型设计模式包括适配器模式、装饰器模式、代理模式、组合模式、享元模式和外观模式。这些模式关注如何通过类和对象的组合来创建更大的结构,并提供了一种优雅的方式来简化系统的复杂性。 行为型设计模式包括策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式和中介者模式。这些模式关注对象之间的通信和交互,它们提供了一种优雅的方式来实现松耦合和可维护的代码。 总之,设计模式是软件开发中非常重要的一部分,它们提供了一种通用的解决方案来处理常见的设计问题。通过学习和应用设计模式,开发人员可以提高代码的可复用性、可扩展性和可维护性,并加快开发进度。 ### 回答2: 设计模式是软件开发中常用的解决问题的一种思维方式或者说是一种已被证实有效的解决问题的方法。GOF 23种设计模式是由四位著名的软件工程师提出并总结出的一套经典的设计模式GOF 23种设计模式分别是创建型模式、结构型模式和行为型模式。创建型模式包括简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式。结构型模式包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。行为型模式包括策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式和解释器模式。 GOF 23种设计模式具有不同的应用场景和优势。通过学习和理解这些设计模式,开发者可以更加灵活地应对各种软件开发中的问题。同时,掌握这些设计模式也有助于提高代码的可读性、可维护性和可扩展性。 附带C语言实现源码是一种更加具体的学习和理解设计模式的方法。通过查看实现源码,可以更加直观地看到设计模式在实践中的应用。这些源码可以作为学习的参考,帮助开发者更好地理解设计模式的思想和使用方式。 总之,设计模式是软件开发中非常重要的一部分,通过学习GOF 23种设计模式并理解其应用场景和优势,可以提高软件开发的效率和质量。附带C语言实现源码能够更加具体地帮助开发者理解设计模式的实际应用。 ### 回答3: 设计模式是软件工程中常用的一种设计思想或模板,可以用于解决特定的问题和提供可重用的解决方案。GOF(Gang of Four)提出了23种设计模式,并在书籍《设计模式:可复用面向对象软件的基础》中进行了详细的解析和说明。 这本书详细地介绍了23种设计模式,包括创建型模式、结构型模式和行为型模式。通过阅读这本书,读者可以了解每种设计模式的特点、适用场景和实现方法。另外,书中还通过示例代码的方式演示了每种设计模式的具体实现,并提供了附带的C语言实现源码。 这本书对于理解设计模式的概念和思想非常有帮助。它不仅提供了23种设计模式的名字和简介,还详细解释了每种模式的适用场景和应用案例。读者可以通过学习这些设计模式,了解如何将它们应用于自己的软件开发工作中,提高代码的可重用性和可维护性。 书中的C语言实现源码是帮助读者理解和实践设计模式的重要资源。通过阅读源码,读者可以更加深入地理解每种设计模式的具体实现细节,并进一步提升自己的编程能力。 总之,通过学习《设计模式:可复用面向对象软件的基础》这本书,读者可以全面了解设计模式的概念、分类和实现方法,并通过阅读附带的C语言实现源码来加深对设计模式的理解和应用。这将对提升软件设计和开发的能力和水平非常有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值