移动APP为什么要开发两套Android和IOS-桥接模式
一、前言
现在用H5开发个 web app 多么方便,兼容两大系统Andriod和IOS。但是为什么许多公司还要开发原生的APP?开发原生的APP就需要开发两套一套运行在Andriod系统的,一套运行在IOS系统的,麻不麻烦啊?
我咨询了一个专业做移动端的朋友说:H5做展示性的还可以,交互太多还是需要做原生的!具体我不懂不做过多描述了。
其实开发几套和我们今天的主题的没有多大的关系,只是一个引子。
今天就一支付宝、微信的例子解说最近正在看的设计模式-桥接模式。
例子只是加深对桥接模式的理解!!!
例子只是加深对桥接模式的理解!!!
例子只是加深对桥接模式的理解!!!
二、基本概念
桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
简单的理解就是将抽象部分(Abstraction)与实现部分(Implementor)分离,使它们可以独立地变化。
在软件系统中,有些类型由于自身的逻辑,它具有两个或多个维度的变化。为了解决这种多维度变化,又不引入复杂度,这就要使用Bridge模式。
Bridge模式使用“对象间的组合/聚合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。
桥接模式包含四个角色:
抽象(Abstraction):定义抽象接口,该接口中包含实现具体行为、具体特征的Implementor接口。
提炼的抽象(RefinedAbstraction):继承自Abstraction的子类,依旧是一个抽象的事物名。
实现(Implementor):定义具体行为,具体特征的应用接口。
具体实现(ConcreteImplementor):实现Implementor。
三、代码
基本的代码实现:
//实现类接口角色
public abstract class Implementor
{
public abstract void Opration();
} //具体实现类A角色
public class ConcreteImplementorA : Implementor
{
public override void Opration()
{
Console.WriteLine("A Opration");
}
}
//具体实现类B角色
public class ConcreteImplementorB : Implementor
{
public override void Opration()
{
Console.WriteLine("B Opration");
}
} //抽象类角色
public abstract class Abstraction
{
public abstract void Opration(Implementor implementor);
} //扩充抽象类角色
public class RefinedAbstraction : Abstraction
{
public override void Opration(Implementor implementor)
{
implementor.Opration();
}
} static void Main(string[] args)
{
Abstraction abstraction = new RefinedAbstraction(); abstraction.Opration(new ConcreteImplementorA());
abstraction.Opration(new ConcreteImplementorB()); Console.ReadKey();
}
运行结果如下:

支付宝和微信app 示例代码:
//抽象类角色:APP应用
public abstract class Application
{
public abstract void Write();
}
//具体实现类角色:支付宝app
public class Alipay : Application
{
public override void Write()
{
Console.WriteLine("改变,因我而来!-支付宝");
}
}
//具体实现类角色:微信app
public class Weixin : Application
{
public override void Write()
{
Console.WriteLine("微信,是一个生活方式!");
}
} //扩充抽象类角色:手机系统
public abstract class MobileSystem
{
public abstract void TaskOpen(Application app);
}
//扩充抽象类角色:Android系统
public class Android : MobileSystem
{
public override void TaskOpen(Application app)
{
app.Write();
}
}
//扩充抽象类角色:IOS系统
public class Ios:MobileSystem
{
public override void TaskOpen(Application app)
{
app.Write();
}
} static void Main(string[] args)
{
//android 系统运行支付宝和微信
MobileSystem androidSystem = new Android();
androidSystem.TaskOpen(new Alipay());
androidSystem.TaskOpen(new Weixin()); //Ios 系统运行支付宝和微信
MobileSystem iosSystem = new Ios();
iosSystem.TaskOpen(new Alipay());
iosSystem.TaskOpen(new Weixin()); Console.ReadKey();
}
运行结果如下:

四、总结
优点:
分离抽象接口及其实现部分。
桥接模式有时类似于多继承方案,但是多继承方案违背了类的单一职责原则(即一个类只有一个变化的原因),复用性比较差,而且多继承结构中类的个数非常庞大,桥接模式是比多继承方案更好的解决方法。
桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。
实现细节对客户透明,可以对用户隐藏实现细节。
使用场景:
当一个对象有多个变化因素时,可以考虑使用桥接模式,通过抽象这些变化因素,将依赖具体实现修改为依赖抽象。
如果使用继承的实现方案,会导致产生很多子类,任何一个变化因素都需要产生多个类来完成,就要考虑桥接模式。
当我们期望一个对象的多个变化因素可以动态变化,而且不影响客户端的程序使用时。
示例代码下载:
https://yunpan.cn/cYDk6q4xcuDbK (提取码:2610)
移动APP为什么要开发两套Android和IOS-桥接模式的更多相关文章
- 总结使人进步,可视化界面GUI应用开发总结:Android、iOS、Web、Swing、Windows开发等
可视化界面的软件,是21世纪最主流的应用类型了,黑屏控制台的不适合普通用户. 2004年左右的时候,作为普通网民,接触的自然是可视化,准确是Windows那一套. 那个时候,Microsoft ...
- cocos2d-x系列 Mac下配置cocos2d-x开发环境(android和ios)
一.下载cocos2d-x http://cocos2d-x.org/projects/cocos2d-x/wiki/Download cocos2d-x-2.1.4.zip @ June.18, 2 ...
- Mac下配置cocos2d-x开发环境(android和ios)
一.下载cocos2d-x http://cocos2d-x.org/projects/cocos2d-x/wiki/Download cocos2d-x-2.1.4.zip @ June.18, 2 ...
- JAVA开发的23种设计模式之 --- 桥接模式
桥接模式 概述:将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化.如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构. 应用场景 实现系统可能有多 ...
- 谈谈App的混合开发
一.概念 App混合开发,顾名思义,是一个开发模式,指的是开发一个App一部分功能用native构建一部分功能用html5构建,英文名叫:Hybrid App. 在几年前就已经出现了App混合开发模式 ...
- MAUI与Blazor共享一套UI,媲美Flutter,实现Windows、macOS、Android、iOS、Web通用UI
1. 前言 距离上次发<MAUI初体验:爽>一文已经过去2个月了,本计划是下半年或者明年再研究MAUI的,现在计划提前啦,因为我觉得MAUI Blazor挺有意思的:在Android.iO ...
- Web项目也能一键打包Android、IOS
随着移动互联网的不断发展,智能手机配置的不断提高,越来越多的年轻人基本都在使用手机,如微信.支付宝等等.已基本成为一种习惯,坐电梯也好.吃饭也好.开车也好,基本都捧着一个手机在那按来按去,开车就不建议 ...
- 提高Android和iOS调试编译速度
http://www.cnblogs.com/findumars/p/7841252.html 提高Android和iOS调试编译速度 如果您使用Delphi开发App,就会遇到:Android和 ...
- Appium - Android 对照 iOS
Appium - Android 对照 iOS 作者: Max.Bai 时间: 2014/10 Appium - Android 对照 iOS Appium 支持Android也支持iOS.可是两者还 ...
随机推荐
- 通过代码实现gz压缩,并保持原来的文件名
写这篇博客主要是为了记录一下这两天来的研究成果-gz带原有文件名压缩.首先要说的是这个解决方案不是通过调用命令gzip来做的,而是通过java代码来实现的,其中用到了apache的common com ...
- Java小方法
/** * 计算百分比. * @param dividend 被除数 * @param divisor 除数 * @return 结果 */ private String getPercent(lon ...
- 50个jquery代码片段(转)
本文会给你们展示50个jquery代码片段,这些代码能够给你的javascript项目提供帮助.其中的一些代码段是从jQuery1.4.2才开始支持的做法,另一些则是真正有用的函数或方法,他们能够帮助 ...
- 如何使用emacs编写c语言程序,并编译运行
vi和emacs被分别被称为编辑器之神和神之编辑器.vi的入门精通都很难,emacs入门容易,精通难:vi使用起来不停地切换模式,而emacs则不停地ctrl,meta等组合键.因此,高德纳大师说操作 ...
- javascript之url转义escape()、encodeURI()和encodeURIComponent()
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod ...
- [转][ASP.NET MVC 小牛之路]12 - Section、Partial View 和 Child Action
本文转自:http://www.cnblogs.com/willick/p/3410855.html 概括的讲,View中的内容可以分为静态和动态两部分.静态内容一般是html元素,而动态内容指的是在 ...
- 计算机中的颜色XIV——快速变换颜色的V分量
基本知识回顾: 计算机中的颜色Color,用RGB模式存储(用R.G.B三个分量表示颜色,每个分量的范围是0—255). 而计算机中的颜色除了用RGB模式表示以外,常见的还有HSV模式(或者是HSB. ...
- 【iOS 初见】第一个简单的 iOS 应用
本实例来自 <iOS编程(第4版)>,介绍如何编写一个简单的 iOS 应用. 功能为:在视图中显示一个问题,用户点击视图下方的按钮,可以显示相应的答案,用户点击上方的按钮,则会显示一个新的 ...
- C语言异或运算在程序设计中的妙用
异或运算符∧也称XOR运算符.它的规则是若参加运算的两个二进位同号,则结果为0(假):异号则为1(真).即0∧0=0,0∧1=1,1∧1=0. 性质: (1).与1异或会翻转 (2).与0异或保持不变 ...
- 数据结构Java实现05----栈:顺序栈和链式堆栈
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...