欢迎关注微信公众号:FSA全栈行动 👋java
桥接模式是一种结构型模式,将抽象部分与实现部分分离,使它们均可以独立的变化,通俗来讲,是经过组合来桥接其它的行为/维度。数据库
补充:桥接模式用于设计的前期,精细化的设计,让系统更加灵活编程
在编码以前,先举个例子,手机有很规格,好比品牌、内存、机身颜色等等,那么在设计数据库表的时候,绝对不可能在 phone 表中用字段直接描述以上规格,就好比机身颜色来讲,除了有常见的红绿蓝等颜色,还有相似 “亮黑”、“晴雪”、“墨羽” 等自定义的颜色,而且后期还可能重命名,可想而知,在 Phone 表中用一个字段来描述颜色维护性是有多差,更别说内存了(内存还分品牌、容量、带宽...),这时把就得考虑把颜色单独放一张 Color 表,两表之间经过 外键关联,之后无论是增长或重命名颜色,都很灵活。微信
表与表之间经过 外键关联(通常是 Int 类型) 就是一种桥接模式,那么在实际编码中,通常是经过 组合 的方式实现这种桥接关系,即在 Phone 类中持有 Color 对象。另外,由于对象除了能够描述属性,还能够有行为方法,因此说,桥接模式能够桥接其它的行为/维度。markdown
建立 颜色接口,以及 具体颜色类:ide
/** * 颜色接口 * * @author GitLqr */
public interface IColor {
String getColor();
}
public class BlueColor implements IColor {
@Override
public String getColor() {
return "蓝色";
}
}
public class RedColor implements IColor {
@Override
public String getColor() {
return "红色";
}
}
复制代码
建立抽象角色手机类,持有 Color 对象:oop
/** * 抽象角色:手机 * * @author GitLqr */
public abstract class Phone {
/** * 经过组合的方式来桥接其余行为 */
protected IColor color;
public void setColor(IColor color) {
this.color = color;
}
/** * 手机的方法 */
public abstract void run();
}
复制代码
建立具体角色手机类:this
/** * 手机实例:小米手机 * * @author GitLqr */
public class MiPhone extends Phone {
public MiPhone(IColor color) {
this.setColor(color);
}
@Override
public void run() {
System.out.println(color.getColor() + "小米手机运行中...");
}
}
/** * 手机实例:苹果手机 * * @author GitLqr */
public class IPhone extends Phone {
public IPhone(IColor color) {
this.setColor(color);
}
@Override
public void run() {
System.out.println(color.getColor() + "苹果手机运行中...");
}
}
复制代码
使用:编码
public static void main(String[] args) {
Phone miPhone = new MiPhone(new BlueColor());
miPhone.run(); // 蓝色小米手机运行中...
Phone iPhone = new IPhone(new RedColor());
iPhone.run(); // 红色苹果手机运行中...
}
复制代码
若是文章对您有所帮助, 请不吝点击关注一下个人微信公众号:FSA全栈行动, 这将是对我最大的激励. 公众号不只有Android技术, 还有iOS, Python等文章, 可能有你想要了解的技能知识点哦~spa