装修接单网,谷歌排名优化入门教程,网站推广工具工作室,朝阳建设局网站什么是桥梁模式
桥梁模式#xff08;Bridge Pattern#xff09;也称为桥接模式#xff0c;属于结构型模式#xff0c;它主要目的是通过组合的方式建立两个类之间的联系#xff0c;而不是继承。桥梁模式将抽象部分与它的具体实现部分分离#xff0c;使它们都可以独立地变… 什么是桥梁模式
桥梁模式Bridge Pattern也称为桥接模式属于结构型模式它主要目的是通过组合的方式建立两个类之间的联系而不是继承。桥梁模式将抽象部分与它的具体实现部分分离使它们都可以独立地变化。
桥梁模式的核心角色
桥梁模式的实现通常包括以下四个角色 Abstraction——抽象化角色它的主要职责是定义出该角色的行为同时保存一个对实现化角色的引用该角色一般是抽象类。Implementor——实现化角色它是接口或者抽象类定义角色必需的行为和属性。RefinedAbstraction——修正抽象化角色它引用实现化角色对抽象化角色进行修正。ConcreteImplementor——具体实现化角色它实现接口或抽象类定义的方法和属性。
桥梁模式如何实现
小王是一个富二代家里的产业很多开煤矿、搞房地产等等如果设计一个程序来帮助小王来管理家族产业那么应该怎么实现呢这里就可以使用桥梁模式来实现。为什么可以使用桥梁模式呢原因是这样的小王家大业大、善于投资这些产业可能会发生变化比如煤矿不挣钱了就改搞新能源如果房地产不挣钱了那就搞酒店住宿可以看出来具体的业务可能会发生变化那有没有不会发生变化的东西当然有。这么大的产业一般会成立一些子公司分别来管理这些产业然后通过一个母公司来控制这些子公司。
那这里的母公司就是抽象化角色Abstraction子公司就是实现化角色RefinedAbstraction这些不同的产业可以抽象为产品类即实现化角色Implementor产品有两个共同的行为被生出来、被销售出去煤碳、房产等这些就是具体的具体实现化角色ConcreteImplementor下面就用代码来演示一个这个过程 MotherCompany抽象化母公司属于抽象化角色AbstractionCoalCompany煤炭公司袱类属于实现化角色RefinedAbstractionHouseCompany房产公司类继承于MotherCompany属于具体实现化角色ConcreteImplementorProduct:抽象产品类即实现化角色ImplementorHouse房产实体类继承于Product属于具体实现化角色ConcreteImplementorCoal煤炭实体类继承于Product属于具体实现化角色ConcreteImplementor
/*** 抽象产品,实现化角色Implementor*/
public abstract class Product {/*** 被生产出来*/public abstract void beProduted();/*** 被销售出去*/public abstract void beSelled();
}
/*** 煤炭,具体实现化角色ConcreteImplementor*/
public class Coal extends Product{Overridepublic void beProduted() {System.out.println(煤炭生产);}Overridepublic void beSelled() {System.out.println(煤炭销售);}
}/*** 房产,具体实现化角色ConcreteImplementor*/
public class House extends Product{Overridepublic void beProduted() {System.out.println(房产生产);}Overridepublic void beSelled() {System.out.println(房产销售);}
}/*** 母公司就是抽象化角色Abstraction*/
public abstract class MotherCompany {private Product product;public MotherCompany(Product product) {this.product product;}public void mange(){this.product.beProduted();this.product.beSelled();}
}
/*** 煤炭公司,实现化角色RefinedAbstraction*/
public class CoalCompany extends MotherCompany{public CoalCompany(Product product) {super(product);}Overridepublic void mange() {super.mange();System.out.println(今年煤炭生意火爆);}
}
/*** 房产公司,实现化角色RefinedAbstraction*/
public class HouseCompany extends MotherCompany{public HouseCompany(Product product) {super(product);}Overridepublic void mange() {super.mange();System.out.println(今年房地产生意不好);}
}
public class Test {public static void main(String[] args) {Product productnew Coal();MotherCompany motherCompanynew CoalCompany(product);motherCompany.mange();System.out.println(----------------);productnew House();motherCompanynew HouseCompany(product);motherCompany.mange();}
} 如果小王家又新增投资旅游产业开了一家景点经营公司怎么办呢新增一个旅游公司的类、门票类就可以了原来的业务不用改完全符合开闭原则 /*** 门票*/
public class Ticket extends Product {Overridepublic void beProduted() {System.out.println(印刷门票);}Overridepublic void beSelled() {System.out.println(卖门票);}
}
/*** 旅游公司*/
public class TourismCompany extends MotherCompany{public TourismCompany(Product product) {super(product);}Overridepublic void mange() {super.mange();System.out.println(旅游人数爆火);}
}
public class Test {public static void main(String[] args) {Product productnew Ticket();MotherCompany motherCompanynew TourismCompany(product);motherCompany.mange();}
}
桥梁模式的适用场景
桥梁模式的应用场景包括
当你想要解耦抽象和具体类时例如在软件系统中抽象和具体的功能经常需要变化而通过使用桥梁模式你可以将它们解耦使得你可以在不改变其他部分的情况下更改它们。当你需要实现可扩展的软件系统时桥梁模式可以帮助你实现更灵活的架构因为你可以在不影响其他部分的情况下添加新的具体实现。当你需要隐藏实现的细节时桥梁模式可以帮助你隐藏实现的细节只暴露公共接口这样客户端只需要和抽象类打交道不需要关心具体的实现细节。
总结
优点
创建灵活且易于扩展的软件产品、简化客户端代码、易于维护和修改等。
缺点
如增加系统的复杂性和理解难度、需要正确地识别出系统中两个独立变化的维度、需要对系统进行递归处理等。
总的来说桥梁模式是一种结构型设计模式它通过将抽象和具体解耦使得它们可以独立地变化从而提高了系统的灵活性和可扩展性但同时也需要仔细考虑和设计才能正确应用。