应用场景
桥接模式最典型的一个应用就是解决类爆炸的问题。
如下问题:
传统解决方案造成类爆炸:
桥接模式解决问题:
提到桥接模式就会反复的提到一句话:将抽象与实现分离开来!
简单点说:就是指在一个软件系统的抽象化和实现化之间使用关联关系(组合或者聚合关系)而不是继承关系,从而使两者可以相对独立地变化,这就是桥接模式的用意
举一个简单例子:
该图其实就体现了 抽象与 实现之间的解耦!
//Action抽象类
public abstract class Action {
protected Role role;
public void setRole(Role role){
this.role = role;
}
public abstract void diIt();
}
//walk类
public class Walk extends Action{
@Override
public void diIt() {
// TODO Auto-generated method stub
this.role.doSomeThing();
System.out.println("我要走路了");
}
}
//jump类
public class Jump extends Action{
@Override
public void diIt() {
// TODO Auto-generated method stub
this.role.doSomeThing();
System.out.println("我要跳了");
}
}
//pullSkill类
public class PullSkill extends Action{
@Override
public void diIt() {
// TODO Auto-generated method stub
this.role.doSomeThing();
System.out.println("我要放技能");
}
}
//Role接口
public interface Role {
public void doSomeThing();
}
//Epimatium
public class Epimatium implements Role{
@Override
public void doSomeThing() {
// TODO Auto-generated method stub
System.out.println("我是肉盾角色:");
}
}
//Master 类
public class Master implements Role{
@Override
public void doSomeThing() {
// TODO Auto-generated method stub
System.out.println("我是法师角色:");
}
}
//客户端
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
Role role = new Epimatium();
Action walk = new Walk();
walk.setRole(role);
walk.diIt();
Role role1 = new Master();
Action jump = new Jump();
jump.setRole(role1);
jump.diIt();
Action skill = new PullSkill();
skill.setRole(role1);
skill.diIt();
}
}
看完这个例子我们就能轻而易举的解决上述的类爆炸问题了。