设计模式专题(十八) ——桥接模式
时间:2022-05-03
本文章向大家介绍设计模式专题(十八) ——桥接模式,主要内容包括设计模式专题(十七) ——单例模式、设计模式专题(十六)——迭代器模式、设计模式专题(十五) ——组合模式、设计模式专题(十四)——适配器模式、设计模式专题(十三) ——备忘录模式、设计模式专题(十二)——状态模式、设计模式专题(十一)——抽象工厂模式、设计模式专题(十)——观察者模式、设计模式专题(九) ——外观模式、设计模式专题(八) ——模板方法模式、设计模式专题(七)——建造者模式、设计模式专题(六)——原型模式、设计模式专题(五)——工厂方法模式、设计模式专题(四)——代理模式、设计模式专题(三)——装饰模式、设计模式专题(二)——策略模式、设计模式专题(一)——面向对象的设计原则、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
设计模式专题(十八)——桥接模式
(原创内容,转载请注明来源,谢谢)
一、概述
桥接模式(Bridge)将抽象部分与实现部分分离,使每一部分之间互相独立化,使类之间可以组合起来使用,而不是继承的方式使用。
当某个类,可以通过不同的分类方式进行分类,例如手机,可以通过品牌分类、通过软件分类。当着两个维度对手机进行分类时,无法确定哪一类是主类,无论对什么分类进行处理,都会出现另一个维度的分类处理起来很复杂。
此时就需要使用桥接模式进行处理。
二、类图
三、比较
1、桥接模式和适配器模式
适配器模式主要是用于将两个完全无关的类,通过编写一个转接的接口,实现两个类的结合;而桥接模式主要是讲相关的类通过一定关系组合起来。
2、桥接模式和抽象工厂模式
抽象工厂模式主要是通过创建一系列的工厂对象,将一个类具体化扩充;桥接模式主要是通过组合,将不同的功能配合在一起。这两个模式通常可以共用。
四、设计实现
1、业务需求
按照上述的手机,不同的手机操作系统、不同的软件,两个维度进行划分,实现灵活的设计方案。
2、设计方案
1)手机品牌抽象类
2)手机软件抽象类
3)手机品牌具体类
4)手机软件具体类
5)客户端调用
3、PHP实现
<?php
//桥接模式——实现手机软件和手机品牌的桥接
//手机品牌抽象类
abstract class PhoneBrand{
private$arrPhoneSoft;//用于装载软件
publicfunction __construct(array $arrPhoneSoft = array()){
$this->arrPhoneSoft= array();
if(!empty($arrPhoneSoft)){
foreach($arrPhoneSoftas $soft){
if($softinstanceof PhoneSoft){
array_push($this->arrPhoneSoft,$soft);
}
}
}
}
//提供添加软件功能
publicfunction addSoft(PhoneSoft $soft){
array_push($this->arrPhoneSoft,$soft);
return$this->arrPhoneSoft;
}
publicfunction addSoftBatch(array $arrPhoneSoft){
if(empty($arrPhoneSoft)){
return$this->arrPhoneSoft;
}
foreach($arrPhoneSoftas $soft){
if($softinstanceof PhoneSoft){
$this->addSoft($soft);
}
}
return$this->arrPhoneSoft;
}
}
//手机软件抽象类
abstract class PhoneSoft{
publicfunction run(){}//具备运行功能
}
//手机具体品牌
class PhoneBrandA extends PhoneBrand{
private$arrPhoneSoft;//用于装载软件
publicfunction __construct(array $arrPhoneSoft = array()){
parent::__construct($arrPhoneSoft);
}
}
//手机软件具体类
class PhoneSoftA extends PhoneSoft{
publicfunction run(){
echo'PhoneSoftA running';
}
}
//客户端调用
$myPhone = new PhoneBrandA(array(newPhoneSoftA()));
$myPhone->arrPhoneSoft[0]->run();
——written by linhxx 2017.08.16
相关阅读:
设计模式专题(十七) ——单例模式
设计模式专题(十六)——迭代器模式
设计模式专题(十五) ——组合模式
设计模式专题(十四)——适配器模式
设计模式专题(十三) ——备忘录模式
设计模式专题(十二)——状态模式
设计模式专题(十一)——抽象工厂模式
设计模式专题(十)——观察者模式
设计模式专题(九) ——外观模式
设计模式专题(八) ——模板方法模式
设计模式专题(七)——建造者模式
设计模式专题(六)——原型模式
设计模式专题(五)——工厂方法模式
设计模式专题(四)——代理模式
设计模式专题(三)——装饰模式
设计模式专题(二)——策略模式
设计模式专题(一)——面向对象的设计原则
- 来学习几个简单的Hive函数啦
- 推荐系统实战-基于用户的协同过滤
- 素数的筛法
- 听说GAN很高大上,其实就这么简单
- python3 解码base64遇到的问题与解决
- TensorFlow从0到1 - 16 - L2正则化对抗“过拟合”
- 使用虚拟环境,搭建python3+scrapy
- Matplotlib基础全攻略
- Python 小爬虫 - 爬取今日头条街拍美女图
- python3使用zookeeper和私钥解密及编码转化配置信息
- Python中os.path.dirname(__file__)的用法
- TensorFlow从0到1 - 18 - TensorFlow 1.3.0安装手记
- Python + Splinter 实现浏览器自动化操作入门指南
- 动态地理信息可视化——leaflet在线地图简介
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 前后端数据交互-json 你还不会传集合吗?
- 动态规划-背包问题(01背包、完全背包、多重背包)
- 疫情数据分析与展示--小程序版
- 动态规划-LCS、LIS
- 图书管理系统设计与实现—看这篇就够了
- 动态规划-区间DP
- 动态规划-树形DP
- 面试官:你精通多少种语言的 Hello World?
- Redis安装(Windows和Linux)详细图解
- 史上最详细版 头文件biso.h,graphics.h,libbgi.a
- ZooKeeper入门,这一篇给你讲的明明白白
- 数论-GCD、LCM、扩展欧几里得
- “豪 横”版 channel_v3.json,你确定不需要?
- Redis-性能测试(redis-benchmark)
- 一条贪吃蛇的使命——零基础入门贪吃蛇游戏