最新消息

java桥接模式

设计模式 金牌剑客 1648℃ 0评论

定义

将抽象部分与实现部分分离,使它们可以独立变化。

场景

由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。

桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。

比如:计算机与CPU,CPU厂商有Intel与AMD,计算机有Dell,Hp,联想等等,而如果每一个计算机品牌需要实现各个cpu的子类,则需要m(计算机种类数) * n(cpu的种类数),如果把cpu抽象出来,则子类数则变成m + n

类图

bridge

Abstraction:抽象部分的接口。通常在这个对象中,要维护一个实现部分的对象引用,抽象对象里面的方法,需要调用实现部分的对象来完成。这个对象中的方法,通常都是和具体的业务相关的方法。

RefinedAbstraction:扩张抽象部分的实现。通常在这些对象中,定义跟实际业务相关的方法,这些方法的实现通常会使用Abstract中定义的方法,也可能需要调用实现部分的对象来完成。

Implementor:定义实现部分的接口。

ConcreteImplementor:真正实现Implementor接口的对象。

下面是计算机的例子类图:
bridge_example

java源代码

CPU.java

public interface CPU {
	public String display();
}

IntelCPU.java

public class IntelCPU implements CPU {
	@Override
	public String display() {
		return "intel cpu";
	}
}

AmdCPU.java

public class AmdCPU implements CPU {
	@Override
	public String display() {
		return "amd cpu";
	}
}

Computer.java

public abstract class Computer {
	protected CPU cpu;
	public Computer(CPU cpu) {
		this.cpu = cpu;
	}
	public abstract void show();
}

DellComputer.java

public class DellComputer extends Computer {
	public DellComputer(CPU cpu) {
		super(cpu);
	}
	@Override
	public void show() {
		System.out.println("dell computer use " + cpu.display());
	}
}

HpComputer.java

public class HpComputer extends Computer {
	public HpComputer(CPU cpu) {
		super(cpu);
	}
	@Override
	public void show() {
		System.out.println("hp computer use " + cpu.display());
	}
}

Client.java

public class Client {
	public static void main(String[] args) {
		CPU intelCpu = new IntelCPU();
		CPU amdCpu = new AmdCPU();
		Computer dellComputer = new DellComputer(intelCpu);
		Computer dellComputer2 = new DellComputer(amdCpu);
		Computer hpComputer = new HpComputer(intelCpu);
		Computer hpComputer2 = new HpComputer(amdCpu);
		dellComputer.show();
		dellComputer2.show();
		hpComputer.show();
		hpComputer2.show();
	}
}

运行结果:

dell computer use intel cpu
dell computer use amd cpu
hp computer use intel cpu
hp computer use amd cpu

转载请注明:QualInfo » java桥接模式

喜欢 (3)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址