设计模式——桥接模式

什么是桥接模式

将抽象部分与实现部分分离开来,使抽象部分与实现部分能够自由的独立变化。

抽象部分:并不是指传统的抽象类,而是指实现部分的共有特性

实现部分:我的理解是抽象部分的来源,一组对象将共同对象抽离出来后,剩下的就是实现部分

例如有一组有颜色有形状的图像,那么可以从颜色中抽离出形状作为抽象部分,而颜色作为实现部分

 

桥接模式的角色

Abstraction:抽象类

RefinedAbstraction:扩充抽象类

Implementor:实现类接口

ConcreteImplementor:具体实现类

 

针对上面的图像形状与颜色的关系,我们来写一个Demo:

 

Abtraction:

public abstract class Abstraction {
    
    protected Implementor  Imple;
    
    protected void setImple(Implementor imple){
        this.Imple=imple;
    } 

    public abstract void Operator();
    
}

 

Implementor:

public interface Implementor {
    
    void setColor();
        
}

 

Red:

public class Red implements Implementor{
    
    public void setColor(){
        System.out.println("染成了红色");
    }
    
}

 

Blue:

public class Blue implements Implementor{
    
    public void setColor(){
         System.out.println("染成了蓝色");
    }
    
}

 

triangle:

public class triangle extends Abstraction{ 
    
    public void choose(Implementor imple){
         super.setImple(imple);
    }
    
    @Override
    public void Operator(){
        super.Imple.setColor();
    }
   
}

 

main:

public class main {
    public static void main(String[] args){
        triangle tri=new triangle();
        tri.choose(new Red());
        tri.Operator();
        
        tri.choose(new Blue());
        tri.Operator();
    }
}

 

结果:

 

桥接模式的一点思考

桥接模式将抽象部分与实现部分由继承关系变为了关联关系,从而实现松耦合,使抽象部分和实现部分都能很好的进行扩展,为什么说桥接模式是松耦合呢?拿上面的例子来说,如果使用继承关系,即颜色类继承图像类,假设我们想扩展正方形,由于继承关系,那么正方形可以被染成蓝色,也可以被染成红色,但我们不允许让正方形被染成蓝色,此时便会有问题,正方形被迫染成了蓝色(当然也可以覆盖相应方法,但这是一种糟糕的方式,代码逻辑非常混乱),如果使用桥接模式,将其变为上面例子中的关联关系,则新增一个图形或是颜色都不会影响彼此,不存在被动接受的情况,桥接模式本身适用于两个维度的事物之间的关联度不高的情况,满足开闭原则,使两个维度的事物可以自由变换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值