Bridge

桥接模式:将抽象部分和它实现的部分分离,使得它们都可以独立地变化。

什么叫抽象与它的实现分离,并不是说,让抽象与其派生类分离,因为这是没有任何意义。实现是指抽象类和它的派生类用自己的对象。如:手机既可以按照品牌来分类,也可以按照功能来分类。

Bridge模式是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。

实现系统可能有多角度分类,每一种分类都有可能变化,那么把这种多角度分离出来让它们独立变化,减少它们之间的耦合。

public abstract class PhoneSoft {

    public abstract void run();

}

class Game extends PhoneSoft{

    @Override
    public void run() {
        System.out.println("运行手机游戏!");
    }
    
}

//若添加手机软件,只需要再写一个类继承。
class Address extends PhoneSoft{

    @Override
    public void run() {
        System.out.println("运行手机通讯录!");
    }

}
public abstract class PhoneBrand {

    protected String name;

    //聚合关系
    protected PhoneSoft soft;

    public PhoneBrand(String name) {
        this.name = name;
    }

    //设置手机软件,品牌需要关注软件
    public void setPhoneSoft(PhoneSoft soft) {
        this.soft = soft;
    }

    public abstract void opera();

}

class BrandM extends PhoneBrand {

    public BrandM(String name) {
        super(name);
    }

    @Override
    public void opera() {
        System.out.println("The Brand is " + name);
        soft.run();
    }

}

class BrandN extends PhoneBrand {

    public BrandN(String name) {
        super(name);
    }

    @Override
    public void opera() {
        System.out.println("The Brand is " + name);
        soft.run();
    }

}
    public static void main(String[] args) {
        PhoneSoft game = new Game();
        PhoneSoft address = new Address();
        
        PhoneBrand brandM = new BrandM("M");
        PhoneBrand brandN = new BrandM("N");
        
        brandM.setPhoneSoft(game);
        brandN.setPhoneSoft(address);
        
        brandM.opera();
        brandN.opera();
    }

打印结果:
The Brand is M
运行手机游戏!
The Brand is N
运行手机通讯录!

posted @ 2012-07-28 18:00  Kyle_Java  阅读(254)  评论(0编辑  收藏  举报