num11---桥接模式
2024-10-06 04:58:34
比如手机类,有各种类型,比如翻盖、平板等,每一类下又有各个品牌,比如华为,如果新增一个类型,比如折叠屏,或者新增一个手机品牌,苹果,那么会导致
扩展性问题。
这种情况下,应该使用桥接模式。
代码:
创建手机品牌接口以及两个手机品牌实现类
//品牌手机接口 public interface Brand { void open(); void close(); void call(); } public class Vivo implements Brand { @Override public void open() { System.out.println(" Vivo手机开机 "); } @Override public void close() { System.out.println(" Vivo手机关机"); } @Override public void call() { System.out.println(" Vivo手机打电话"); } } public class XiaoMi implements Brand { @Override public void open() { System.out.println("小米手机开机 "); } @Override public void close() { System.out.println("小米手机关机"); } @Override public void call() { System.out.println("小米手机打电话"); } }
创建 手机抽象类,以及两个按照类别区别的实现类:
public abstract class Phone { //组合 品牌 private Brand brand; //构造器 public Phone(Brand brand) { super(); this.brand = brand; } protected void open() { this.brand.open(); } protected void close() { brand.close(); } protected void call() { brand.call(); } } //折叠手机 public class FoldedPhone extends Phone { public FoldedPhone(Brand brand) { super(brand); } public void open() { super.open(); System.out.println("折叠手机 "); } public void close() { super.close(); System.out.println("折叠手机 "); } public void call() { super.call(); System.out.println("折叠手机 "); } } //翻盖手机 public class UpRightPhone extends Phone { public UpRightPhone(Brand brand) { super(brand); } public void open() { super.open(); System.out.println(" 翻盖手机"); } public void close() { super.close(); System.out.println("翻盖手机"); } public void call() { super.call(); System.out.println(" 翻盖手机"); } }
测试:
public static void main(String[] args) { Phone phone1 = new FoldedPhone(new XiaoMi()); phone1.open(); phone1.call(); phone1.close(); System.out.println("======================="); Phone phone2 = new FoldedPhone(new Vivo()); phone2.open(); phone2.call(); phone2.close(); System.out.println("=============="); UpRightPhone phone3 = new UpRightPhone(new XiaoMi()); phone3.open(); phone3.call(); phone3.close(); System.out.println("=============="); UpRightPhone phone4 = new UpRightPhone(new Vivo()); phone4.open(); phone4.call(); phone4.close(); }
===================================
===========================================
最新文章
- URL类
- 【转】Eclipse下启动tomcat报错:/bin/bootstrap.jar which is referenced by the classpath, does not exist.
- ssh架构简单解释和vo po解释
- java分享第二天(变量及命名规范)
- 编写自己的Acunetix WVS漏洞扫描脚本详细教程
- 【OpenCV入门指南】第一篇 安装OpenCV
- GLib基础
- 回顾javase点滴
- nodejs对静态文件目录的处理
- php做站点购物车 你搞懂了吗?
- IntPtr与自定义结构互转
- Cloud Engine
- UVALive-5731
- Java :内部类基础详解
- [LeetCode] Subtree of Another Tree 另一个树的子树
- Unable to find remote helper for 'https'
- 每日分享!~ vue JavaScript中为什么可以读取到字符串的长度!(包装对象)
- (自用 )npm --save和--save-dev区别
- 动态改变APP图标
- CentOS中与网络相关的常用
热门文章
- 在nginx服务器里面搭建好node.js本地服务器后,利用Node.js的FS模块,实现简单数据的写入和读取
- 你真的看懂Android事件分发了吗?
- FlashFXP 5.0.0官方中文破解版,附文件下载地址和破解码
- 【Java并发基础】并发编程领域的三个问题:分工、同步和互斥
- Java 利用Map集合计算一个字符串中每个字符出现的次数
- Friday the Thirteenth 黑色星期五 USACO 模拟 超级简单做法
- .net core2.2上传文件总结
- .NET Core开发的iNeuOS工业互联平台,iNeuKernel物联网核心组件在Docker容器中部署。
- Vue中的nextTick()浅析
- Oracle v_$和v$的解释