桥接模式
概述
如果要绘制矩形、圆形、椭圆、正方形,至少需要四个形状类,如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时有两种设计方案:
- 第一种:为每一个形状提供一套各种颜色的版本,使用继承的方法,如果有四种形状,十二种颜色,则需要四十八个类。如果要增加新形状,则同时也要具备所有的颜色
- 第二种:提供四个形状类、十二种颜色类,对形状和颜色进行组合,此时系统中的类是十六个。如需增加新的形状或颜色,只需再增加一个新的形状类或颜色类即可
采用方案二可以使系统中类的个数更少,且系统扩展更为方便
模式实例
现需提供大小两种型号的画笔,能绘制三种不同的颜色
颜色接口 Color
public interface Color {
void bepaint(String penType, String name);
}
颜色实现类 Red
public class Red implements Color {
@Override
public void bepaint(String penType, String name) {
System.out.println(penType + "红色的" + name);
}
}
颜色实现类 Green
public class Green implements Color {
@Override
public void bepaint(String penType, String name) {
System.out.println(penType + "绿色的" + name);
}
}
颜色实现类 Blue
public class Blue implements Color {
@Override
public void bepaint(String penType, String name) {
System.out.println(penType + "蓝色的" + name);
}
}
画笔抽象类 Pen
public abstract class Pen {
protected Color color;
public void setColor(Color color) {
this.color = color;
}
public abstract void draw(String name);
}
画笔实现类 BigPen
public class BigPen extends Pen {
@Override
public void draw(String name) {
String penType = "大号毛笔绘制";
this.color.bepaint(penType, name);
}
}
画笔实现类 SmallPen
public class SmallPen extends Pen {
@Override
public void draw(String name) {
String penType = "小号毛笔绘制";
this.color.bepaint(penType, name);
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战