桥接模式:将类的功能层次和实现层次分离,动态结合
1.工厂模式:提供创建对象的接口2.单例模式:生成只存在一个的实例
3.桥接模式:将类的功能层次和实现层次分离,动态结合
4.享元模式:避免大量相同开销5.原型模式:通过复制生成实例6.建造者模式:组装复杂实例7.职责链模式:推卸责任8.模板模式:具体的步骤延迟到子类中实现9.迭代器模式:一个个遍历10.外观模式:隐藏了复杂系统的复杂性,并提供一个简单的接口来访问系统11.代理模式:为其他对象提供一种代理以控制对这个对象的访问12.适配器模式:将两个不兼容的类纠合在一起13.组合模式:处理树形结构数据14.装饰器模式:动态给一个对象添加一些额外的职责15.命令模式:命令也是类16.访问者模式:访问数据结构并处理数据17.观察者模式:发送状态变化通知18.状态模式:用类表示状态19.策略模式:整体替换算法20.解释器模式:语法规则也是类21.中介者模式:只有一个仲裁者22.备忘录模式:保存对象状态桥接模式是一种软件设计模式,它可以将抽象部分与它们的实现部分分离开来,以便两者都可以独立地进行变化。该模式使用组合而不是继承来完成这一点。
在桥接模式中,抽象部分和实现部分之间建立了一个桥梁(Bridge)。抽象部分定义出高层次结构,而实现部分定义出低层次结构。通过桥梁,抽象部分和实现部分可以独立地进行扩展,而不会影响到对方。
举个例子,假设你正在设计一个图形用户界面(GUI)工具包,其中包含不同类型的 UI 元素(如按钮、文本框等)。每种 UI 元素都有不同的行为和样式,而这些行为和样式与操作系统、窗口系统和视觉主题等因素相关联。使用桥接模式,你可以将 UI 元素和这些因素分离开来,使得它们可以独立地进行扩展和修改,从而更好地适应不同的环境和需求。
总的来说,桥接模式可以帮助我们实现更加灵活和可扩展的软件系统,并且可以减少类之间的耦合。
// 实现化角色 interface GuiImpl { void drawButton(); } // 具体实现化角色A class WindowsGui implements GuiImpl { public void drawButton() { System.out.println("Windows风格的按钮"); } } // 具体实现化角色B class MacGui implements GuiImpl { public void drawButton() { System.out.println("Mac风格的按钮"); } } // 抽象化角色 abstract class Button { protected GuiImpl impl; public Button(GuiImpl impl) { this.impl = impl; } abstract void draw(); } // 扩展抽象化角色 class SquareButton extends Button { public SquareButton(GuiImpl impl) { super(impl); } public void draw() { System.out.print("绘制正方形按钮,样式为:"); impl.drawButton(); } } // 扩展抽象化角色 class CircleButton extends Button { public CircleButton(GuiImpl impl) { super(impl); } public void draw() { System.out.print("绘制圆形按钮,样式为:"); impl.drawButton(); } } // 客户端代码 public class Client { public static void main(String[] args) { GuiImpl windows = new WindowsGui(); GuiImpl mac = new MacGui(); Button squareButton = new SquareButton(windows); Button circleButton = new CircleButton(mac); squareButton.draw(); circleButton.draw(); } }
合集:
Java设计模式
分类:
Java设计模式 / 结构型模式
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性