设计模式---桥接模式

定义

桥接模式:将抽象和 实现解耦,使得两者可以独立地变化。

 

桥接模式有4种角色:

● Abstraction——抽象化角色

它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般 是抽象类。如下面例子的Product抽象类。

● Implementor——实现化角色

它是接口或者抽象类,定义角色必需的行为和属性。 如下面例子的Company抽象类

● RefinedAbstraction——修正抽象化角色

它引用实现化角色对抽象化角色进行修正。如下面例子的House、Clothes和Iphone类。

● ConcreteImplementor——具体实现化角色

它实现接口或抽象类定义的方法和属性。如下面例子的HouseCompany与MyCompany类。

 

案例

/**
 * 抽象产品类
 */
public abstract class Product {
    //生产产品
    public abstract void beProduced();
    //销售产品
    public abstract void beSelled();
}

 

/**
 * 房子
 */
public class House extends Product {
    @Override
    public void beProduced() {
        System.out.println("生产房子...");
    }

    @Override
    public void beSelled() {
        System.out.println("销售房子...");
    }
}

 

/**
 * 衣服
 */
public class Clothes extends Product {
    @Override
    public void beProduced() {
        System.out.println("生产衣服...");
    }

    @Override
    public void beSelled() {
        System.out.println("销售衣服...");
    }
}

 

/**
 * 苹果手机
 */
public class Iphone extends Product {
    @Override
    public void beProduced() {
        System.out.println("生产苹果手机...");
    }

    @Override
    public void beSelled() {
        System.out.println("销售苹果手机...");
    }
}

 

/**
 * 抽象公司类
 */
public abstract class Company {

    //公司产品
    private Product product;

    public Company(Product product) {
        this.product = product;
    }

    //设置产品
    public void setProduct(Product product) {
        this.product = product;
    }

    //赚钱
    public void makeMoney() {
        this.product.beProduced();
        this.product.beSelled();
    }

}

 

/**
 * 房地产公司
 */
public class HouseCompany extends Company {

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

    public void makeMoney() {
        super.makeMoney();
        System.out.println("房地产公司赚钱啦...");
    }
}

 

/**
 * 我的公司
 */
public class MyCompany extends Company {

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

    public void makeMoney() {
        super.makeMoney();
        System.out.println("我的公司赚钱啦...");
    }

}

 

public class BridgePatternDemo {

    public static void main(String[] args) {
        House house = new House();
        HouseCompany houseCompany = new HouseCompany(house);
        houseCompany.makeMoney();

        Clothes clothes = new Clothes();
        MyCompany myCompany = new MyCompany(clothes);
        myCompany.makeMoney();
        System.out.println("替换产品啦啦啦~~~");
        myCompany.setProduct(new Iphone());
        myCompany.makeMoney();
    }

}

在这个了例子种,产品类和公司类进行了解耦,我门可以自定义别的产品类,只要继承了Product抽象类即可。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值