设计模式之桥接模式

  1. 什么是桥接模式

    • 将抽象和实现解耦,使得两者可以独立变化
  2. 桥接模式的4个角色

    • Abstraction、Implementor、RedefinedAbstraction、ConcreteImplementor
    • Abstraction:抽象化角色,定义出角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类,示例中为Corp类
    • Implementor:实现化角色,接口或者抽象类,定义角色必须的行为和属性,示例中为Product类
    • RedefinedAbstraction:修正化角色,引用实现化角色对抽象化角色进行修正,示例中为RealtyCorp类
    • ConcreteImplementor:具体实现化角色,实现接口或抽象类定义的方法和属性,示例中为House类和CheapIphone类
  3. 代码示例

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();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值