您的位置:首页 > 其它

设计模式之桥接模式

2016-06-25 15:26 267 查看
什么是桥接模式

将抽象和实现解耦,使得两者可以独立变化

桥接模式的4个角色

Abstraction、Implementor、RedefinedAbstraction、ConcreteImplementor

Abstraction:抽象化角色,定义出角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类,示例中为Corp类

Implementor:实现化角色,接口或者抽象类,定义角色必须的行为和属性,示例中为Product类

RedefinedAbstraction:修正化角色,引用实现化角色对抽象化角色进行修正,示例中为RealtyCorp类

ConcreteImplementor:具体实现化角色,实现接口或抽象类定义的方法和属性,示例中为House类和CheapIphone类

代码示例

package com.pattern.bridge;

/**
* 公司类,抽象类,具体的公司需要继承这个类
* @author yjzhou
*/
public abstract class Corp {
private Product product;

/**
* 初始化本公司产品
* @param product
*/
public Corp(Product product) {
this.product = product;
}

/**
*
*/
public void makeMoney(){
this.product.produce();
this.product.sell();
}
}


package com.pattern.bridge;

/**
* 产品类,所有的产品都要继承这个类
* @author yjzhou
*/
public abstract class Product {
/**
* 产品制造
*/
public abstract void produce();
/**
* 产品销售
*/
public abstract void sell();
}


package com.pattern.bridge;

/**
* 房地产公司,只买卖房子
* @author yjzhou
*/
public class RealtyCorp extends Corp{

public RealtyCorp(House house) {
super(house);
}

/**
* 房地产公司的赚钱方法
*/
public void makeMoney(){
super.makeMoney();
System.out.println("房地产公司赚钱了-----");
}

}


package com.pattern.bridge;

public class House extends Product{

@Override
public void produce() {
System.out.println("制造房子---");
}

@Override
public void sell() {
System.out.println("卖房子------");
}

}


package com.pattern.bridge;

/**
* 山寨Iphone产品类
* @author yjzhou
*/
public class CheapIphone extends Product{

@Override
public void produce() {
System.out.println("山寨Iphone制造了------");
}

@Override
public void sell() {
System.out.println("山寨Iphone开始销售了-----");
}

}


package com.pattern.bridge;

/**
* 山寨产品公司,产品不确定
* @author yjzhou
*/
public class CheapCopy extends Corp{

public CheapCopy(Product product) {
super(product);
}

public void makeMoney(){
super.makeMoney();
System.out.println("山寨产品公司赚钱了-------");
}

}


package com.pattern.bridge;

public class TestBridge {

public static void main(String[] args) {
RealtyCorp realtyCorp = new RealtyCorp(new House());
realtyCorp.makeMoney();

CheapCopy cheapCopy = new CheapCopy(new CheapIphone());
cheapCopy.makeMoney();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息