设计模式-桥接模式

桥接模式-Bridge Pattern

桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有效控制了系统中类的个数。

我的理解:在抽象类中引用实现类接口,使每一个扩充抽象类都可以使用任意一个具体实现类。

●抽象类:用于定义抽象类的接口,它一般是抽象类而不是接口,其中定义了一个实现类接口类型的对象并可以维护该对象,它与实现类接口之间具有关联关系,它既可以包含抽象业务方法,也可以包含具体业务方法。

●扩充抽象类:扩充由抽象类定义的接口,通常情况下它不再是抽象类而是具体类,它实现了在抽象类中声明的抽象业务方法,在扩充抽象类中可以调用在实现类接口中定义的业务方法。

●实现类接口:定义实现类的接口,这个接口不一定要与抽象类的接口完全一致,事实上这两个接口可以完全不同,一般而言,实现类接口仅提供基本操作,而抽象类定义的接口可能会做更多更复杂的操作。实现类接口对这些基本操作进行了声明,而具体实现交给其子类。通过关联关系,在抽象类中不仅拥有自己的方法,还可以调用到实现类接口中定义的方法,使用关联关系来替代继承关系。

●具体实现类:具体实现实现类接口,在不同的具体实现类中提供基本操作的不同实现,在程序运行时,具体实现类对象将替换其父类对象,提供给抽象类具体的业务操作方法。


实现类接口:

public interface AbstractLOG {
    public void doLog();
}
抽象类:

public abstract class AbstractOS {

    protected AbstractLOG abstractLOG;  //引入一个实现类接口

    public void setAbstractLOG(AbstractLOG abstractLOG){
        this.abstractLOG = abstractLOG;
    }

    public abstract void getOS();
}

扩充抽象类:

public class MacOS extends AbstractOS {
    @Override
    public void getOS() {
        abstractLOG.doLOG();
        System.out.println("使用 MacOS");
    }
}
public class WindowsOS extends AbstractOS {
    @Override
    public void getOS() {
        abstractLOG.doLOG();
        System.out.println("使用WindowsOS");
    }
}
具体实现类:

public class DatabaseLOG implements AbstractLOG {
    @Override
    public void doLog() {
        System.out.println("数据库记录日志");
    }
}
public class FileLOG implements AbstractLOG {
    @Override
    public void doLog() {
        System.out.println("文件记录日志");
    }
}

Client:
public class Client {

    public static void main(String[] args) {
        AbstractLOG LOG;
        AbstractOS OS;

        OS = new WindowsOS();
        LOG = new DatabaseLOG();
        OS.setAbstractLOG(LOG);
        OS.getOS();
    }

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值