软件设计之桥接模式

实现茶水间:茶可以分红茶和绿茶,每种茶又可以分大杯和中杯,现在你是服务员需要计算茶水的价格。

 

package Bridge;

public class BlackTea implements TeaKind{
    private float redTeaPrice = 2.0f;
    @Override
    public float price() {
        return redTeaPrice;
    }
}
package Bridge;

public class GreenTea implements TeaKind{
    private float greenTeaPrice = 3.0f;
    @Override
    public float price() {
        return greenTeaPrice;
    }
}
package Bridge;

public class MediumSize implements TeaSize{
    TeaKind teaKind;

    public MediumSize(TeaKind teaKind) {
        this.teaKind = teaKind;
    }

    @Override
    public float getPrice() {
        return teaKind.price()*2;
    }
}
package Bridge;

public class SuperSize implements TeaSize{
    private TeaKind teaKind;

    public SuperSize(TeaKind teaKind) {
        this.teaKind = teaKind;
    }

    @Override
    public float getPrice() {
        return teaKind.price()*3;
    }
}
package Bridge;

public interface TeaKind {
    public abstract float price();
}
package Bridge;

public interface TeaSize {
    public abstract float getPrice();
}
package Bridge;

public class Client {
    public static void main(String[] args) {
        TeaSize tea1 = new MediumSize(new GreenTea());
        System.out.println("绿茶中杯的价格:" + tea1.getPrice());
        TeaSize tea2 = new SuperSize(new GreenTea());
        System.out.println("绿茶大杯的价格:" + tea2.getPrice());
        TeaSize tea3 = new MediumSize(new BlackTea());
        System.out.println("红茶中杯的价格:" + tea3.getPrice());
        TeaSize tea4 = new SuperSize(new BlackTea());
        System.out.println("红茶大杯的价格:" + tea4.getPrice());
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/220084.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“快慢指针”思想在物理或者逻辑循环中的应用

1 基础概念 1.1 什么是物理循环和逻辑循环? 物理循环是指物理索引访问顺序上相邻,逻辑上也相邻,比如循环链表,逻辑循环则指物理的索引上不一定相邻 1.2 快慢指针本质上可以解决逻辑循环问题,而物理循环也属于逻辑循…

【java】toString() 导致的 StackOverflowError 异常

这是怎么导致的呢? A 类属性包含着 B 类的引用 B 类属性包含着 A 类的引用 代码大概就是这样的: Data public class User{public String name;public Dog dog; }Data public class Dog{public String name;public User user; }User user new User()…

面试前自测题,接口自动化测试过程中怎么处理接口依赖?

面试的时候经常会被问到在接口自动化测试过程中怎么处理接口依赖? 首先我们要搞清楚什么是接口依赖。 01、什么是接口依赖 接口依赖指的是,在接口测试的过程中一个接口的测试经常需要依赖另一个或多个接口成功请求后的返回数据。 那怎么处理呢&#…

机器学习---使用 EM 算法来进行高斯混合模型的聚类

1. 指定k个高斯分布參数 导包 import math import copy import numpy as np import matplotlib.pyplot as pltisdebug False 全局变量 isdebug可以用来控制是否打印调试信息。当 isdebug 为 True 时,代码中的一些调试信 息将被打印出来,方便进行调试…

Kubernetes(k8s)访问不了Pod服务

在k8s集群部署java web应用的服务时,浏览器访问不了pod服务或linux终端curl http://192.168.138.112:30000即curl http://ip地址:端口号失败,如下图: 在网上找了很久的答案,最后还是没解决,后来突然想起来一直是在k8…

7个简单技巧,让你从容应对压力面试!

01-什么是压力面试? 压力面试是指有意制造紧张,以了解求职者将如何面对工作压力的一种面试形式。 事实上,压力面试不是单独存在的一类面试,往往是穿插在面试过程中。 面试人通过提出不礼貌、冒犯的问题,或者用怀疑、…

JavaWeb(五)

一、JDBC概述 JDBC 就是使用Java语言操作关系型数据库的一套API 全称是Java DataBase Connectivity 表示Java数据库连接。 JDBC的本质是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口,各个数据库厂商去实现这套接口&#xff0…

11、信息打点——红队工具篇FofaQuakeSuize水泽Arl灯塔

网络空间测绘引擎 Fofa Quake shodan Zoomeye 主要搜关联资产、特征资产、资产信息(在测绘引擎上直接搜IP,它会显示所有与该域名有关的信息。) fofa和Quake测绘引擎集成化工具:Finger 自动化信息收集项目 ARL灯塔 Suize水泽 …

编程语言分类

如果要将编程语言分成两大类,可以考虑以下分类方式: 编译型语言(Compiled Languages):这类语言在运行之前需要通过编译器将源代码转换为机器码或类似形式的可执行代码。编译型语言的特点包括: 需要显式的编…

二极管:TVS瞬态抑制二极管

一、什么是TVS二极管 TVS(Transient Voltage Suppressors),即瞬态电压抑制器,又称雪崩击穿二极管。 TVS二极管的符号如下图所示 什么是雪崩击穿 雪崩击穿是有必要了解一下的,不然后面还有齐纳击穿,搞不…

GoWin FPGA--- startup2

clock Click Tools\IP Core Generator\rPLL, and open the configure file 原语 for Clock 双击选项,生产对应的代码,Copy到制定的地点。 右侧有对应的说明文件

【优选算法系列】【专题一双指针】第三节.611. 有效三角形的个数和LCR 179. 查找总价格为目标值的两个商品

文章目录 前言一、有效三角形的个数 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写 1.2.3 题目总结二、查找总价格为目标值的两个商品 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 …

FastAPI与BaseModel

from typing import Optionalfrom fastapi import FastAPI from pydantic import BaseModel #当一个模型属性具有默认值时,它不是必需的。否则它是一个必需属性。将默认值设为 None 可使其成为可选属性 app FastAPI() class Item(BaseModel):name:str #没有初始值都…

动态类型语言与静态类型语言的对比与比较

编程语言可以根据类型系统和类型检查时机分为动态编程语言和静态编程语言两大类,它们在运行时的代码检查方式、变量类型的使用方式等方面有很大的区别。这一块你知道吗? 本文将为您详细讲解两种编程语言的优缺点,以及它们的应用场景。 动态编…

基于SpringBoot的校园互助网站

简介 本系统分为三个角色,分别是普通用户和管理员、以及超级管理员,主要的功能模块有注册、登录、物品代购、快递代取、话题管理、任务管理、反馈管理、投诉管理、订单管理等功能模块。 项目 数据库 首页 登录 新增反馈 发布话题 发布任务 接单 我要投诉…

Windows下使用AndroidStudio及CMake编译Android可执行程序或静态库动态库

Windows下使用AndroidStudio及CMake编译Android可执行程序或静态库动态库 文章目录 Windows下使用AndroidStudio及CMake编译Android可执行程序或静态库动态库一、前言二、编译环境三、示例C/CPP程序1、总体工程结构2、示例代码3、CMakeLists.txt(重要)4、…

深入理解URL、URI和URN在Web开发中的重要性

引言: 在Web开发中,我们经常听到URL、URI和URN这几个术语,它们是构建和理解互联网资源的基础。虽然它们看起来相似,但实际上代表着不同的概念。本文将深入研究URL、URI和URN的定义、用途以及在Web开发中的重要性。 一、什么是URI&…

Verilog基础:$time、$stime和$realtime系统函数的使用

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html $time、 $stime和$realtime这三个系统函数提供了返回当前仿真时间方法。注意,这里的仿真时间的最小分辨能力是由仿真时间精度决定的,简单来说,可以理解为…

Oracle连接错误:ORA-28040:没有匹配的验证协议

一、产生原因:oci动态库版本太低,无法连接高版本的数据库 二、解决办法 1、下载高版本的oci库 https://www.oracle.com/database/technologies/instant-client/winx64-64- downloads.html 2、解压并复制oci动态库 3、粘贴到相应的目录

VSCode + gdb + gdbserver调试ARM程序

在开发ARM嵌入式端C/C程序时,一般会在PC上编写代码,在Linux服务器上编译,然后将程序复制或挂载到ARM开发板上运行。如果程序出了问题,在不使用gdb的情况下,经常在代码中添加打印,编译,然后在开发…