码迷,mamicode.com
首页 > 编程语言 > 详细

java设计模式-桥接模式

时间:2018-06-04 23:25:33      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:view   组合   桥接   display   桥接模式   很多   需要   图片   分享图片   

1.背景                      

追MM的例子,Boy追MM,需要送礼物Gift,有Flower,Ring继承自Gift;

还有WarmGift温暖的礼物,WildGift狂野的礼物;

Boy:

技术分享图片
public class Boy {
    private String name;
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    public void pursue(MM mm){
        Gift g = new Ring();
        give(g, mm);
    }
    
    public void give(Gift g, MM mm){
        
    }
}
View Code

MM

技术分享图片
public class MM {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    
}
View Code

其他的一些礼物类,都继承于Gift:

技术分享图片
public class Gift {

}
public class Flower extends Gift{

}
public class Ring extends Gift{

}
public class WarmGift extends Gift{

}
public class WildGift extends Gift{

}
View Code

Gift在往子类扩展,扩展类型的时候,它会有两个维度上的扩展;

一种是具体的维度,比如说ring
一种是类型上的划分,比如是warm的,wild的;
比如现在有一种温柔的花,怎么组织呢,一种方法是从flower继承,为warmFlower;
....
慎用继承,因为继承关系代表着很强烈的一种耦合关系,父类要变了,子类马上要跟着变;而设计的时候讲究高内聚低耦合;
那么能不能找到一种方式,同时支持在上面两种维度上的扩展呢?
——桥接模式:
 
 
 
2.桥接模式引入                      
 使用聚合代替继承;
 
礼物的具体实现类,GiftImpl.java:
/**
 * 礼物具体的实现
 * @author CY
 *
 */
public class GiftImpl extends Gift{

}

Gift:

public class Gift {
    protected GiftImpl impl;
}

Flower:

技术分享图片
public class Flower extends GiftImpl{

}
View Code

Ring

技术分享图片
public class Ring extends GiftImpl{
    
}
View Code

WarmGift:

public class WarmGift extends Gift{
    
    public WarmGift(GiftImpl impl){
        this.impl = impl;
    }
    
}

WildGift:

技术分享图片
public class WildGift extends Gift{
    
    public WildGift(GiftImpl impl){
        this.impl = impl;
    }
}
View Code

Boy:

技术分享图片
public class Boy {
    private String name;
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    public void pursue(MM mm){
        //Gift g = new WarmGift(new Flower());            //温暖的花
        Gift g = new WildGift(new Ring());                //狂野的戒指
        give(g, mm);
    }
    
    public void give(Gift g, MM mm){
        
    }
}
View Code

 

感觉有一点绕,需要仔细体会下....

 

3.小结:                      

如果在子类的扩展中,有两个维度,那么这时候想解耦合,来解决他们的排列组合的问题,这个时候可以用桥接;
桥接模式用的并不是很多;
 
 
 

java设计模式-桥接模式

标签:view   组合   桥接   display   桥接模式   很多   需要   图片   分享图片   

原文地址:https://www.cnblogs.com/tenWood/p/9136392.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!