桥接模式(Bridge)

桥接模式,就是把向多个方向发展的变化由继承的实现变为了耦合的实现。


package mode.bridge.test;/*** * 首先是一个抽象的咖啡类,有一个抽象的倒咖啡的方法* * 在这个类中有一个咖啡伴侣的属性,为什么会有这个属性。因为我们在冲咖啡的时候可能加入不同种类的咖啡伴侣,也可能冲大杯的和小杯的咖啡。* 这样我们的咖啡就有了两个方向的变化,大小和咖啡伴侣类型。我们的咖啡类控制自己的大小,那么就将咖啡伴侣的类型交给其他类去控制,而将控制* 伴侣的类变为自己的一个属性。 这样就把继承变成了耦合 这样我们就不必头疼通过继承去实现时成指数级增加的工作量了* * */
public abstract class CoffeeTest {//要在子类中使用,所以定义为protectedprotected CoffeeImpTest coffeeImpTest;public void setCoffeeImpTest(CoffeeImpTest coffeeImpTest) {this.coffeeImpTest = coffeeImpTest;}public abstract void pourCoffee();}

package mode.bridge.test;/*** * 控制咖啡伴侣的类,有一个加咖啡伴侣的方法* * */
public abstract class CoffeeImpTest {public abstract void pouerCoffeeImp();
}

package mode.bridge.test;
/*** *加清香型伴侣* * */
public class CoffeeImpTestFragrant extends CoffeeImpTest {@Overridepublic void pouerCoffeeImp() {System.out.println("清香型咖啡伴侣");}}

package mode.bridge.test;
/*** * 加奶香型伴侣* * */
public class CoffeeImpTestMilk extends CoffeeImpTest {@Overridepublic void pouerCoffeeImp() {System.out.println("奶香型咖啡伴侣");}}

package mode.bridge.test;/*** * 弄一大杯咖啡* * */
public class CoffeeTestBig extends CoffeeTest {@Overridepublic void pourCoffee() {System.out.print("冲了大杯咖啡" + "伴侣是:");//加入自己喜欢的伴侣this.coffeeImpTest.pouerCoffeeImp();}}

package mode.bridge.test;/*** * 弄一小杯咖啡* * */
public class CoffeeTestSmall extends CoffeeTest {@Overridepublic void pourCoffee() {System.out.print("冲了小杯咖啡" + " 咖啡伴侣是:");//加入自己喜欢的伴侣this.coffeeImpTest.pouerCoffeeImp();}}

package mode.bridge.test;/*** * * 在测试中我们可以冲大杯、小杯的咖啡,并且可以随意加入我们喜欢的伴侣了* * */
public class Test {public static void main(String[] args) {// 来一大杯咖啡CoffeeTest coffBig = new CoffeeTestBig();// 来一小杯咖啡CoffeeTest coffSmall = new CoffeeTestSmall();// 大杯的咖啡我想加奶香型的咖啡伴侣coffBig.setCoffeeImpTest(new CoffeeImpTestMilk());coffBig.pourCoffee();// 小杯的咖啡我想加清香型的咖啡伴侣coffSmall.setCoffeeImpTest(new CoffeeImpTestFragrant());coffSmall.pourCoffee();}}


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 中的if else 和in

python中if else 和in的用法php python a3 //python中‘:’是引入一个缩进的代码块 if a1:print(1) elif a3:print(3) else:print("查不到") python中的in 查看一个对象是否在另一个对象中 a[1,2,3,4,5,6] b3 if b in a:print("b在a中") else: 转载于:http…

15年1月的每天小程序

package everyworkdayprogramming._2015_1_04;public class Java_1_4 {/*** * * 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。* * */public static void main(String[] args) {int bit 0, ten 0, hun 0;for (int…

SpringBoot整合升级Spring Security 报错 【The request was rejected because the URL was not normalized】...

前言 最近LZ给项目框架升级, 从Spring1.x升级到Spring2.x, 在这里就不多赘述两个版本之间的区别以及升级的原因。 关于升级过程中踩的坑,在其他博文中会做比较详细的记录,以便给读者参考,不要掉进同样的坑里。 这里我们讨论一个关…

个人测试作业

作业所属课程:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业地址:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/3340 作业目标:测试其他同学项目 姓名:潘云峰201731062423 所…

安装Nvida 显示环境

查看是否能正确加载nvidia 驱动 在终端输入 (glxinfo 需要安装mesa-utils) 如果可以正确加载了nvidia驱动 那么在输入的内容中可以看到NVIDIA 字样 如果GPU是IntelGPU 正确加载类似 卸载 老版本 驱动 sudo apt-get purge nvidia* 把显卡驱动加入PPA sudo…

Activiti5第十一弹,流程监听器与任务监听器

首先创建流程监听器和任务监听器的实体类,个人比较喜欢使用Delegate Expression方式,其他两种方式也可以 流程监听器 package org.mpc.final_activiti;import java.io.Serializable;import org.activiti.engine.delegate.DelegateExecution; import org.…

06_go语言基础

// 07枚举 package main import ( "fmt" ) func main() { // 1.iota常量自动生成器,每个一行,自动累加1 // 2.iota给常量赋值使用 const ( a iota // 0 b iota // 1 c iota // 2 ) fmt.Printf("a %d,b %d,c %d\n", a, b, c) /…

通过继承来实现注解方式的属性注入

要使用注解来注入属性,首先就要定义一个注解,注解的定义如下: package everyworkdayprogramming._2015_1_23;import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; im…

ASCII码对照表

1、字母转换成ASCII码 1 string str "hello";2 byte[] array new byte[1]; 3 array System.Text.Encoding.ASCII.GetBytes(str); //把str的每个字符转换成ascii码4 5 int asciicode1 (short)(array[0]);//h 的…

2015-2月的小程序们

马上就要过年了,今天是二月最后一天上班了,心情有些激动,恨不得立马就到家去。再来公司的时候就是3.1号了,所以在离开之前把2月份的小程序们储存起来。虽然很多都是参考了网上的小程序练习,但是自己有自己的风格&#…

SHOI2009 会场预约

题目传送门 嗯,这道题的标签是STL,因为这个STL用的确实太妙了 这道题目要求维护一堆区间,而一个重要的操作是要删除所有与新区间冲突的区间 虽然可以用\(Splay\)来操作,但用STL里的set也绝对不虚 其中最精妙的当属这个重载运算符 …

创建者模式 builder

package mode.bulider;/*** * 首先是汽车,组成零件有:玻璃、轮胎、发动机;他们都是抽象的概念,所以用抽象类来创建* * */ public class Car {Glass glass;Wheel wheel;Engine engine; } package mode.bulider; /*** * 抽象的玻璃*…

平行四边形的特殊性质

定义平行四边形内角平分线围城的四边形为$\lambda$四边形$\lambda$四边形是矩形 $\lambda$四边形的中线为平行四边形中心$\lambda$四边形的对角线和平行四边形的边平行转载于:https://www.cnblogs.com/guoshaoyang/p/11011612.html

静态方法工厂模式

工厂模式有三种方法来实现,一种是通过传入参数的名称来决定创建哪一个产品,这种方法有很大的缺点,就是如果传入的产品名称如果不小心错误的话,就是无法来创建我们想得到的产品的。另一种是方法工厂模式,这种工厂模式中…

Elasticsearch 入门到高手的成长阶梯-索引的基本操作(1)

1. 创建索引 Elasticsearch中索引的名称&#xff0c;必须符合以下要求&#xff1a; 字母只能够是小写字母不能够包含特殊字符&#xff0c;如\, /, *, ?, ", <, >, |, , ,, #等名称不能够以英文的中划线“-”、下划线“_”以及加号“”开头名称不可以是“.”或“.…

对象的深度复制

首先什么是深度复制&#xff1f;什么又是浅复制&#xff1f; 百度告诉我---------------> 浅复制&#xff1a;将一个对象复制后&#xff0c;基本类型都会重新创建&#xff0c;而引用类型指向的还是原对象所指的引用&#xff1b; 深复制&#xff1a;讲一个对象复制后&…

java 判断int类型为空

int id 10; if("0".equals(String.valueOf(id)) || "null".equals(String.valueOf(id)) || id < 0) return false;比如&#xff1a; "0".equals(String.valueOf(定义的int类型参数)) 判断int类型不能为空或不能小于等于0 也可以转换为String…

P1-0:项目框架搭建

后台java&#xff0c;前端用html,js &#xff0c;数据库用mysql,云数据库 构建BS结构项目 转载于:https://www.cnblogs.com/superisland/p/11016113.html

2.MySQL中的索引

索引就像树的目录&#xff0c;是为了更快的找到所要找的内容&#xff08;数据&#xff09;。MySQL中&#xff0c;索引是在存储引擎层实现的&#xff0c;不同的存储引擎有不同的索引模型&#xff0c;如innodb是采用的是B树的索引模型&#xff0c;本篇主要以innodb存储引擎的索引…

python学习-10 运算符1

1.加&#xff0c;减-&#xff0c;乘*&#xff0c;除/ 例如&#xff1a; a 1 b 2 c a b print(c) 运算结果&#xff1a; 3Process finished with exit code 0 a 1 b 2 c a - b print(c) 运算结果&#xff1a; -1Process finished with exit code 0 a 1 b 2 c a * b pr…