网站建设模块需求,网站代码502,网站建设费放什么科目,wordpress 安装 失败桥接模式#xff08;Bridge Pattern#xff09;属于结构型模式 概述
桥接模式是将抽象部分与它的实现部分分离#xff0c;使它们都可以独立地变化。它是一种对象结构型模式#xff0c;又称为柄体#xff08;Handle and Body#xff09;模式或接口#xff08;InterfaceBridge Pattern属于结构型模式 概述
桥接模式是将抽象部分与它的实现部分分离使它们都可以独立地变化。它是一种对象结构型模式又称为柄体Handle and Body模式或接口Interface模式。
比如需要创建电脑对象市面上的电脑非常多品牌有华为、苹果、联想等等类型有台式、笔记本、平板等等。如果给每个品牌的每个类型的电脑都创建一个对象那是十分繁琐的而且非常不方便扩展。试想如果增加了一个品牌或者类型那就需要增加大量的对象这无疑是笨重和低效的。
这时我们会想如果给品牌和类型分别设置一个维度再将这两个维度组合起来就得到了一个对象这样只需要定义所有的品牌和所有的类型即可如果需要增加只需要增加一个品牌或者类型即可。
代码实现
下面以华为和苹果作为品牌台式和笔记本作为类型示例桥接模式的实现
1、定义品牌
/*** 品牌*/
public interface Brand {/*** 名称*/String name();}2、定义电脑
/*** 电脑*/
public abstract class Computer {/*** 品牌* p因为需要提供继承类使用这里定义为 protected*/protected Brand brand;public Computer(Brand brand) {this.brand brand;}/*** 获取电脑名称留给子类实现*/public abstract String name();
}3、定义具体品牌
/*** 华为*/
public class HuaWei implements Brand {Overridepublic String name() {return 华为;}
}/*** 苹果*/
public class Apple implements Brand {Overridepublic String name() {return 苹果;}
}4、定义类型
/*** 台式*/
public class Desktop extends Computer {public Desktop(Brand brand) {super(brand);}Overridepublic String name() {return super.brand.name() 台式;}
}/*** 笔记本*/
public class Laptop extends Computer {public Laptop(Brand brand) {super(brand);}Overridepublic String name() {return super.brand.name() 笔记本;}
}5、调用
// 苹果笔记本
Computer computer new Laptop(new Apple());
System.out.println(computer.name());// 华为台式机
Computer computer1 new Desktop(new HuaWei());
System.out.println(computer1.name());输出结果为
苹果笔记本
华为台式这样就实现了品牌和类型的桥接。这样需要增加一个品牌时只需要增加一个类实现 Brand 接口即可需要增加一个类型时只需要增加一个类继承 Computer 类即可。
优缺点 优点 1、桥接模式偶尔类似于多继承方案但是多继承方案违背了类的单一职责原则复用性比较差类的个数也比较多桥接模式是比多继承方案更好的解决方法。极大的减少了子类的个数从而降低管理和维护的成本。
2、桥接模式提高了系统的可扩充性在两个变化维度中任意扩展一个维度都不需要修改原有系统。符合开闭原则就像一座桥可以把两个变化的维度连接起来。
3、 抽象和实现的分离。
4、优秀的扩展能力。
5、实现细节对客户透明。 缺点 1、桥接模式的引入会增加系统的理解与设计难度由于聚合关联关系建立在抽象层要求开发者针对抽象进行设计与编程。
2、桥接模式要求正确识别出系统中两个独立变化的维度因此其使用范围具有一定的局限性。
使用场景
1、如果一个系统需要在构建的抽象角色和具体角色之间增加更多的灵活性避免在两个层次之间建立静态的继承联系通过桥接模式可以使它们在抽象层建立一个关联关系。抽象角色和具体角色可以以继承的方式独立扩展而互不影响在程序运行时可以动态将一个抽象子类的对象和一个具体类的对象进行组合即系统需要对抽象角色和具体角色进行动态耦合。
2、一个类存在两个独立变化的维度且这两个维度都需要进行扩展。
3、虽然在系统中使用继承是没有问题的但是由于抽象角色和具体角色需要独立变化设计要求需要独立管理这两者。对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统桥接模式尤为适用。
4、Java 语言通过 Java 虚拟机与操作系统的桥接实现了平台的无关性。
5、AWT 中的 Peer 架构。
6、JDBC 驱动程序。
注意事项
对于两个独立变化的维度使用桥接模式再适合不过了。 参考 https://www.bilibili.com/video/BV1mc411h719?p8vd_source299f4bc123b19e7d6f66fefd8f124a03