软件设计模式(实验六)—— 桥接模式的应用(Java)

实验六 桥接模式的应用(Java实现)

一、实验目的

(1) 掌握桥接模式(Bridge)的特点
(2) 分析具体问题,使用桥接模式进行设计。

二、实验内容和要求

一个咖啡店可以提供大杯(JorumCoffee)、中杯(MediumCoffee)、小杯(SmallCoffee)的咖啡(Coffee),为了满足不同用户的口味,在咖啡中可以添加牛奶(Milk),或者糖(Sugar),或者柠檬(Lemon),提供给用户不同口味的组合,如大杯咖啡加牛奶,中杯咖啡加糖,小杯咖啡加柠檬,小杯咖啡加糖等。应用桥接模式,用C#或Java、C++控制台应用程序实现该设计。绘制该模式的UML图。

三、源代码

1.Additives接口

interface Additives{
    public void add();
}

2.Coffee接口

interface Coffee{
    public void add(Additives additives);
    public void drink();
}

3.Milk 类

class Milk implements Additives{
    @Override
    public void add() {
        System.out.println("牛奶");
    }
}

4.Sugar 类

class Sugar implements Additives{
    @Override
    public void add() {
        System.out.println("糖");
    }
}

5.Lemon 类

class Lemon implements Additives{
    @Override
    public void add() {
        System.out.println("柠檬");
    }
}

6.smallCoffee 类

class smallCoffee implements Coffee{
    private Additives additives;
    @Override
    public void add(Additives additives) {
        this.additives=additives;
    }
    @Override
    public void drink() {
        additives.add();
        System.out.println("小咖啡");
    }
}

7.mediumCoffee 类

class mediumCoffee implements Coffee{
    private Additives additives;
    @Override
    public void add(Additives additives) {
        this.additives=additives;
    }
    @Override
    public void drink() {
        additives.add();
        System.out.println("中咖啡");
    }
}

8.bigCoffee 类

class bigCoffee implements Coffee{
    private Additives additives;
    @Override
    public void add(Additives additives) {
        this.additives=additives;
    }
    @Override
    public void drink() {
        additives.add();
        System.out.println("大咖啡");
    }
}

9.测试类

public class Test {
    public static void main(String[] args){
        Milk milk = new Milk();
        Sugar sugar = new Sugar();
        Lemon lemon = new Lemon();
        smallCoffee small = new smallCoffee();
        mediumCoffee medium = new mediumCoffee();
        bigCoffee big = new bigCoffee();

        milk.add();
        sugar.add();
        lemon.add();
        small.add(sugar);
        medium.add(lemon);
        big.add(milk);
        small.drink();
        medium.drink();
        big.drink();
    }
}

四、UML图

在这里插入图片描述

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
桥接模式是一种结构型设计模式,它的主要目的是将抽象部分与实现部分分离,使它们能够独立地变化。下面是一个Java桥接模式的示例: 首先定义一个抽象类Shape,它有一个DrawAPI的成员变量,表示它的实现。 ```java public abstract class Shape { protected DrawAPI drawAPI; protected Shape(DrawAPI drawAPI) { this.drawAPI = drawAPI; } public abstract void draw(); } ``` 然后定义具体的形状类,比如Circle和Rectangle,它们继承自抽象类Shape,并实现了draw方法。 ```java public class Circle extends Shape { private int x, y, radius; public Circle(int x, int y, int radius, DrawAPI drawAPI) { super(drawAPI); this.x = x; this.y = y; this.radius = radius; } @Override public void draw() { drawAPI.drawCircle(radius, x, y); } } public class Rectangle extends Shape { private int x, y, width, height; public Rectangle(int x, int y, int width, int height, DrawAPI drawAPI) { super(drawAPI); this.x = x; this.y = y; this.width = width; this.height = height; } @Override public void draw() { drawAPI.drawRectangle(x, y, width, height); } } ``` 最后定义一个DrawAPI接口,它有两个方法drawCircle和drawRectangle,表示画圆和画矩形的实现。 ```java public interface DrawAPI { void drawCircle(int radius, int x, int y); void drawRectangle(int x, int y, int width, int height); } ``` 现在,我们可以使用不同的DrawAPI实现来创建不同的Shape对象,比如: ```java DrawAPI redDrawAPI = new RedDrawAPI(); Shape redCircle = new Circle(100, 100, 10, redDrawAPI); redCircle.draw(); DrawAPI greenDrawAPI = new GreenDrawAPI(); Shape greenRectangle = new Rectangle(50, 50, 100, 200, greenDrawAPI); greenRectangle.draw(); ``` 这样就可以将形状的抽象部分和实现部分分离了。如果需要增加一种新的形状或者实现,只需要创建一个新的类实现Shape或者DrawAPI接口即可,不需要修改原有的代码。 完整的代码示例可以参考以下链接:https://github.com/iluwatar/java-design-patterns/tree/master/bridge

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值