(十)桥接模式-代码实现

意图:将抽象部分与它的实现部分分离,使它们都可以独立地变化。

使用场景:当一个接口中有多个方法定义,它的方法有多种有不同的实现,为了避免在子类中重复的定义相同的方法.

//剥离功能1接口

package note.com.bridge;

/**
 * 颜色接口
 * @author lxz
 *
 */
public interface IColour {

    public void buildColour();

}

//功能1实现

package note.com.bridge;

public class Blue implements IColour{

    public void buildColour() {
        System.out.println("蓝色");
    }

}
package note.com.bridge;

public class Red implements IColour{

    public void buildColour() {
        System.out.println("红色");
    }

}

//剥离功能2接口

package note.com.bridge;

/**
 * 味道接口
 * @author lxz
 *
 */
public interface ITaste {

    public void buildTaste();

}

//功能2实现

package note.com.bridge;

/**
 * 甜味
 * @author lxz
 *
 */
public class Sweet implements ITaste{

    public void buildTaste() {
        System.out.println("甜味");
    }

}
package note.com.bridge;

/**
 * 酸味
 * @author lxz
 *
 */
public class Sour implements ITaste{

    public void buildTaste() {
        System.out.println("酸味");
    }

}

//真正的功能接口

package note.com.bridge;

/**
 * 饮料基类
 * @author lxz
 *
 */
public abstract class ADrink {

    private IColour colour = null;

    private ITaste taste = null;

    public ADrink(IColour colour,ITaste taste){
        this.colour = colour;
        this.taste = taste;
    }

    public abstract void finish();

    public IColour getColour() {
        return colour;
    }

    public void setColour(IColour colour) {
        this.colour = colour;
    }

    public ITaste getTaste() {
        return taste;
    }

    public void setTaste(ITaste taste) {
        this.taste = taste;
    }

}

//功能接口实现类

package note.com.bridge;

public class Drink extends ADrink{

    public Drink(IColour colour,ITaste taste) {
        super(colour,taste);
    }

    @Override
    public void finish() {
        System.out.println("酒:");
        getColour().buildColour();
        getTaste().buildTaste();
    }

}

//测试类

package note.com.bridge;

public class DrinkTest {

    public static void main(String[] args) {
        IColour blue = new Blue();
        ITaste sweet = new Sweet();
        Drink drink1 = new Drink(blue,sweet);
        drink1.finish();
        IColour red = new Red();
        ITaste sour = new Sour();
        Drink drink2 = new Drink(red,sour);
        drink2.finish();
    }
}

//结果

酒:
蓝色
甜味
酒:
红色
酸味

时间: 2024-10-09 21:46:39

(十)桥接模式-代码实现的相关文章

23种设计模式之桥接模式代码实例

桥接模式就是把事物与其具体的实现相分离,抽象化与实现化解耦. public interface Sourceable { public void method(); } public class SourceSub1 implements Sourceable { @Override public void method() { System.out.println("this is the first sub!"); } } public class SourceSub2 imple

(二十)解释器模式-代码实现

介绍 概念:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 应用场景:语言解释器(把我们能看懂的代码转换成了难看懂的机器码) 好处:以简单的方式使用复杂的东西. 例子 //解释器 package note.com.interpreter; /** * 解释器 * @author lxz * */ public class Interpreter { public void say(String lag){ if("nh".equals(

桥接模式

一.目录概要 二.场景问题 假设要设计一个电脑商场管理系统的某个模块设计,电脑分为品牌和类型两个纬度,我们应该怎么解决?我们初学者最容易想到的办法就是利用继承的方式,那利用继承实现的类图又是什么样子呢?我们看图. 代码展示 package com.aaron.bridge; public interface Computer { public void sale(); } class Desktop implements Computer{ @Override public void sale(

桥接模式(Bridge)

一.桥接模式介绍: 桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立的变化.而不会直接影响到其他部分. 未使用桥接模式的抽象与实现结构图(如下): 如果要增加一个apple品牌的电脑,则需要在台式机下新增一个apple的台式机 在笔记本下新增一个apple笔记本,在pad下新增一个apple的pad.代码比较繁琐. 如果使用桥接模式(如下图),使抽象部分和抽象的派生(实现)部分分离出来,这样让它们各自的变化,这样每种实现就不会影响到其他实现.从而达到对应变化的目的 将电脑类型作为一个维度

iOS设计模式——桥接模式

何为桥接模式? 桥接模式的目的是把抽象层次结构从其实现中分离出来,使其能够独立变更.抽象层定义了供客户端使用的上层的抽象接口.实现层定义了供抽象层使用的底层接口.实现类的引用被封装于抽象层的实例中,桥接就形成.(与外观模式有一定的相似之处). 桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化. 何时使用桥接模式? @:不想在抽象与其实现之间形成固定的绑定关系,这样就能在运行时切换实现. @:抽象及其实现都应可以通过子类化独立进行扩展. @:对抽象的实现进行修改不应影响客户端代码.

C#设计模式系列:桥接模式(Bridge)

1.1定义 当一个抽象可能有多个实现时,通常用继承来进行协调.抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现.继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立地进行修改.扩充和重用. 如果一个抽象类或接口有多个具体实现子类,而这些子类之中有内容或概念上重叠,需要我们把抽象的共同部分各自独立开来:即原来是准备放在一个接口里,现在需要设计两个接口--抽象接口和行为接口.然后再分别针对各自的具体子类定义抽象接口和行为接口的方法和调用关系. 桥接模式的用意是将抽

一天一个设计模式——Bridge桥接模式

一.概念准备 在理解桥接模式之前,先要理解面向对象程序设计中的两个概念: 类的功能层次结构:假设现在有一个类Something,这个类有一些成员属性和成员方法,但是现有的功能不能满足要求,因此我们想扩展这个类,给这个类创建一个子类SomethingBetter来继承它,并在子类中添加更多属性和方法.像这样不同的功能位于不同的类继承结构中,就构成了类的功能层次结构. 类的实现层次结构:回顾一下抽象类的作用,抽象类声明抽象方法(定义了方法接口API),然后在继承它的子类中实现相关方法.由于我们将方法

(十四)桥接模式详解(都市异能版)

魔都国贸附近,某天夜里十一点半. 那一晚,魔都出奇的没有做只打雷不下雨的勾当,老天似乎是要将魔都淹没一般,倾盆大雨像不要命似的拍打着地面. 漆黑的夜幕中,一道黑影从一个十字路口狂奔而出,而就在此时,一辆红色宝马急速穿过,一瞬间,黑影就犹如被巨力抛飞一般腾空而起,直到几秒钟后,才重重的摔落在车前足足二十多米处. "吱...兹...." 一声凄厉的刹车声划破了魔都的长空. 之后,一个身材高挑的女子,慌忙的从车中奔跑到黑影落下的地方,或许是由于看到倒下之人满身鲜血的模样,女子吓的不禁发出一声

设计模式学习笔记(十六:桥接模式)

1.1概述 将抽象部分与它的实现部分分离,使他们都可以独立地变化.这就是桥接模式的定义. 抽象类或接口中可以定义若干个抽象方法,习惯上将抽象方法称作操作.抽象类或接口使程序的设计者忽略操作的细节,即不必考虑这些操作是如何实现的,当用户程序面向抽象类或接口时,就不会依赖具体的实现,使系统具有很好的扩展性.但是,抽象类中的抽象方法总归是需要子类去实现的,在大多数情况下抽象类的子类完全可以胜任这样的工作,但是在某些情况下,子类可能会遇到一些难以处理的问题. 例如,电视台系统中有一个抽象类CCTV,该类