桥接模式
关于该设计模式要着重理解两个独立变化的维度。
使用桥接模式实现的具体代码:
接口实现部分:
1 2 3 4 5 6 7 8 9 10 | package com.bridge; /** * 接口 */ public interface Brand { void open(); //开机 void close(); //关机 void call(); //打电话 } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package com.bridge; /** * Vivo手机 */ public class Vivo implements Brand { @Override public void open() { System.out.println( "Vivo手机开机了" ); } @Override public void close() { System.out.println( "Vivo手机关机了" ); } @Override public void call() { System.out.println( "Vivo手机打电话" ); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package com.bridge; /** * 小米手机 */ public class XiaoMi implements Brand { @Override public void open() { System.out.println( "小米手机开机了" ); } @Override public void close() { System.out.println( "小米手机关机了" ); } @Override public void call() { System.out.println( "小米手机打电话" ); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package com.bridge; /** * HuaWei手机 */ public class HuaWei implements Brand { @Override public void open() { System.out.println( "HuaWei手机开机了" ); } @Override public void close() { System.out.println( "HuaWei手机关机了" ); } @Override public void call() { System.out.println( "HuaWei手机打电话" ); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package com.bridge; /** * 抽象类:手机 */ public abstract class Phone { //组合品牌 private Brand brand; //构造器 public Phone(Brand brand) { this .brand = brand; } protected void open(){ this .brand.open(); } protected void close(){ this .brand.close(); } protected void call(){ this .brand.call(); } } |
抽象类部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package com.bridge; /** * 折叠式手机 */ public class FoldedPhone extends Phone { //构造器 //所以子类一定要创建一个带参数的构造方法去调用父类的带参数构造方法 public FoldedPhone(Brand brand) { super (brand); } public void open(){ super .open(); System.out.println( "折叠式手机" ); } public void close(){ super .close(); System.out.println( "折叠式手机" ); } public void call(){ super .call(); System.out.println( "折叠式手机" ); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package com.bridge; /** * 滑盖式手机 */ public class SlidePhone extends Phone { //构造器 //所以子类一定要创建一个带参数的构造方法去调用父类的带参数构造方法 public SlidePhone(Brand brand) { super (brand); } public void open(){ super .open(); System.out.println( "滑盖式手机" ); } public void close(){ super .close(); System.out.println( "滑盖式手机" ); } public void call(){ super .call(); System.out.println( "滑盖式手机" ); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package com.bridge; /** * 直立式手机 */ public class UpRightPhone extends Phone { //构造器 //所以子类一定要创建一个带参数的构造方法去调用父类的带参数构造方法 public UpRightPhone(Brand brand) { super (brand); } public void open(){ super .open(); System.out.println( "直立式手机" ); } public void close(){ super .close(); System.out.println( "直立式手机" ); } public void call(){ super .call(); System.out.println( "直立式手机" ); } } |
客户端调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | package com.bridge; /** * 客户端进行调用 */ public class Client { public static void main(String[] args) { //获取折叠式的小米手机 Phone xiaomiFoldedPhone = new FoldedPhone( new XiaoMi()); xiaomiFoldedPhone.open(); xiaomiFoldedPhone.call(); xiaomiFoldedPhone.close(); System.out.println( "=======================" ); //获取折叠式的Vivo手机 Phone vivoFoldedPhone = new FoldedPhone( new Vivo()); vivoFoldedPhone.open(); vivoFoldedPhone.call(); vivoFoldedPhone.close(); System.out.println( "=======================" ); //获取直立式的小米手机 Phone xiaomiUpRightPhone = new UpRightPhone( new XiaoMi()); xiaomiUpRightPhone.open(); xiaomiUpRightPhone.call(); xiaomiUpRightPhone.close(); System.out.println( "=======================" ); //获取直立式的Vivo手机 Phone vivoUpRightPhone = new UpRightPhone( new Vivo()); vivoUpRightPhone.open(); vivoUpRightPhone.call(); vivoUpRightPhone.close(); System.out.println( "=======================" ); //获取滑盖式的小米手机 Phone xiaomiSlidePhone = new SlidePhone( new XiaoMi()); xiaomiSlidePhone.open(); xiaomiSlidePhone.call(); xiaomiSlidePhone.close(); System.out.println( "=======================" ); //获取滑盖式的Vivo手机 Phone vivoSlidePhone = new SlidePhone( new Vivo()); vivoSlidePhone.open(); vivoSlidePhone.call(); vivoSlidePhone.close(); System.out.println( "=======================" ); //获取滑盖式的华为手机 Phone huaweiSlidePhone = new SlidePhone( new HuaWei()); huaweiSlidePhone.open(); huaweiSlidePhone.call(); huaweiSlidePhone.close(); System.out.println( "=======================" ); //获取折叠式的华为手机 Phone huaweiFoldedPhone = new FoldedPhone( new HuaWei()); huaweiFoldedPhone.open(); huaweiFoldedPhone.call(); huaweiFoldedPhone.close(); System.out.println( "=======================" ); //获取直立式的华为手机 Phone huaweiUpRightPhone = new UpRightPhone( new HuaWei()); huaweiUpRightPhone.open(); huaweiUpRightPhone.call(); huaweiUpRightPhone.close(); } } |
运行结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 小米手机开机了 折叠式手机 小米手机打电话 折叠式手机 小米手机关机了 折叠式手机 ======================= Vivo手机开机了 折叠式手机 Vivo手机打电话 折叠式手机 Vivo手机关机了 折叠式手机 ======================= 小米手机开机了 直立式手机 小米手机打电话 直立式手机 小米手机关机了 直立式手机 ======================= Vivo手机开机了 直立式手机 Vivo手机打电话 直立式手机 Vivo手机关机了 直立式手机 ======================= 小米手机开机了 滑盖式手机 小米手机打电话 滑盖式手机 小米手机关机了 滑盖式手机 ======================= Vivo手机开机了 滑盖式手机 Vivo手机打电话 滑盖式手机 Vivo手机关机了 滑盖式手机 ======================= HuaWei手机开机了 滑盖式手机 HuaWei手机打电话 滑盖式手机 HuaWei手机关机了 滑盖式手机 ======================= HuaWei手机开机了 折叠式手机 HuaWei手机打电话 折叠式手机 HuaWei手机关机了 折叠式手机 ======================= HuaWei手机开机了 直立式手机 HuaWei手机打电话 直立式手机 HuaWei手机关机了 直立式手机 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY