【设计模式】桥接模式

1 简介

        桥接模式(Bridge Pattern)定义:将抽象部分(Abstraction)与它的实现部分(Implementor)分离,使得它们可以独立的变化。

        当事物存在两个独立变化的纬度时,将两个变化因素抽取出来形成高层次的关联关系,使原本复杂的类继承结构变得相对简单,极大减少系统中类的个数。

        假如要绘制三角形、正方形、圆形3种形状的图形,每个图形包含红色、绿色、蓝色3种颜色,此时有如下两种方案:

        方案一:

普通方案

         该方案采用多级继承结构,如果需要增加一个新的形状,并且也需要具有3种颜色,则需要增加3个类;如果增加一种新的颜色,则每种形状都需要增加该颜色。因此,该设计方案可能会造成类个数急剧增加(类爆炸)。 

        方案二: 

桥接模式方案

        该方案降低了图形类与颜色类的耦合,减少了代码编写量。

2 代码

        (1)颜色(Color)

public interface Color {
	public void paint(String type);
}

public class Red implements Color{
	@Override
	public void paint(String type) {
		System.out.println("绘制红色的"+type);
	}
}

public class Green implements Color{
	@Override
	public void paint(String type) {
		System.out.println("绘制绿色的"+type);
	}
}

public class Blue implements Color{
	@Override
	public void paint(String type) {
		System.out.println("绘制蓝色的"+type);
	}
}

        (2)图形(Graph)

public abstract class Graph {
	protected Color color;
	public void setColor(Color color) {
		this.color=color;
	}
	public abstract void draw();
}

public class Triangle extends Graph{
	@Override
	public void draw() {
		color.paint("三角形");
	}
}

public class Square extends Graph{
	@Override
	public void draw() {
		color.paint("正方形");
	}
}

public class Circle extends Graph{
	@Override
	public void draw() {
		color.paint("圆形");
	}
}

        (3)客户端(Client)

public class Client {
	public static void main(String[] args) {
		Graph graph1=new Triangle();
		Graph graph2=new Square();
		Graph graph3=new Circle();
		
		Color red=new Red();
		Color green=new Green();
		Color blue=new Blue();
		
		graph1.setColor(red);
		graph2.setColor(green);
		graph3.setColor(blue);
		
		graph1.draw();
		graph2.draw();
		graph3.draw();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

little_fat_sheep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值