抽象与实现分离的桥接模式

桥接模式

定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
角色:
Abstraction:抽象类
RefinedAbstraction:扩充抽象类
Implementor:实现类接口
ConcreteImplementor:具体实现类
类图:
在这里插入图片描述
桥接模式分为两层:抽象层,实现层。
举个栗子:有两个披萨店生产披萨,一个为在北京,另一个在伦敦同时两个pizza店都生产两种pizza分别为GreekPizza和MealPizza。此时产品分为了两个维度。
在这里插入图片描述
**抽象层、实现层的判断:**此时的抽象层就是地区(北京,伦敦),实现层就是Pizza(GreekPizza、MealPizza)。可以根据两个维度的叫法先后来判断抽象层以及实现层。例如北京MealPizza,那么地区就作为抽象层,还有一个理解就是,更加具体的实体为Pizza因此Pizza就为实现层。
代码实现:

抽象层

package bridge;

public abstract class Bridge {

    Pizza pizza;
    Bridge(Pizza pizza){
        this.pizza=pizza;
    }

    public void choosePizza(){
        this.pizza.prepare();
        this.pizza.cut();
    }

}

===========================华丽分割线================================

package bridge;

public class BJBridge extends Bridge {

    BJBridge(Pizza pizza) {
        super(pizza);
    }

    @Override
    public void choosePizza() {
        super.choosePizza();
    }

}
===========================华丽分割线================================
package bridge;

public class LDBridge extends Bridge {

    LDBridge(Pizza pizza) {
        super(pizza);
    }

    @Override
    public void choosePizza() {
        super.choosePizza();
    }
}

实现层

package bridge;

public abstract class Pizza {

    public abstract void prepare();

    public void cut(){
        System.out.println(this.getClass()+"pizza cut");
    }

}


===========================华丽分割线================================
package bridge;

public class GreekPizza extends Pizza{
    @Override
    public void prepare() {
        System.out.println("GreekPizza prepare!");
    }

    @Override
    public void cut() {
        super.cut();
    }
}


===========================华丽分割线================================
package bridge;

public class MealPizza extends Pizza{
    @Override
    public void prepare() {
        System.out.println("MealPizza Prepare");
    }

    @Override
    public void cut() {
        super.cut();
    }
}

客户端

package bridge;

/**
 * 产品分为北京和伦敦两种地区披萨,然后在北京pizza下边有两种GreekPizza and MealPizza
 * 共分为两个维度 地区层为抽象层,实现层为Pizza
 */
public class Clint {

    public static void main(String[] args) {
		//创建父类对象,子类进行初始化
        Pizza p = new GreekPizza();
        Bridge bjBridge = new BJBridge(p);
        bjBridge.choosePizza();

    }
}

代码流程:
创建Bridge对象,并且传入Pizza进行初始化,通过bridge调用其choose方法方法内部由传入的pizza对象调用不同的pizza操作。

看完我写的工厂方法之后发现,这两个逻辑很相似,都是两个维度。但是通过两个相同的例子进行实现可以发现:工厂方法目的是创建对象,而桥接模式是如何将类或者对 象结合在一起形成更大的结构,就像搭积木,可以通过 简单积木的组合形成复杂的、功能更为强大的结构。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值