移动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.可是两者还 ...
随机推荐
- Effective Java 16 Favor composition over inheritance
Inheritance disadvantage Unlike method invocation, inheritance violates encapsulation. Since you don ...
- PHP开发第一个扩展
首先声明:我们要构建的是扩展或者模块名为hello_module.该模块提供一个方法:hello_word. 一.PHP环境的搭建 1)一般使用源码包编译安装,而不是binary包安装.因为使用PHP ...
- 【原】基于 HAproxy 1.6.3 Keeplived 在 Centos 7 中实现mysql mariadb galera cluster 集群分发读写 —— 上篇
前言 有一段时间没有写blogs,乘着周末开始整理下haproxy + keeplived 实现 mysql mariadb galera cluster 集群访问环境的搭建工作. 本文集中讲hapr ...
- avahi-daemon启动失败-解决方法-linux
avahi-daemon是一种Linux操作系统上运行在客户机上实施查找基于网络的Zeroconf service的服务守护进程. 该服务可以为Zeroconf网络实现DNS服务发现及DNS ...
- dubbo学习之服务提供者
1.简介 这里主要记录如何搭建一个spring框架,提供一个dubbo服务,包括详细的步骤. 2.详细步骤 2.1 项目目录结构 2.2 创建maven项目 new --> Web Projec ...
- hdu 敌兵布阵(线段树之单点更新)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- python django 与数据库的交互
下载没有任何问题的mysqdb http://www.codegood.com/archives/4 1创建一个新的app. python manage.py startapp books 2 激活a ...
- 我所理解的 惠普云 (HP Cloud)
HP (惠普)于2014年5月27日宣布了它的新的云产品线 HP Helion,并宣布在接下来的两年时间内向该产品线投资10亿美金.应该说这是一笔很大的投入,充分显示了HP 在云这个领域的决心.本文试 ...
- [转]VS2015 cordova尝试-camera
本文转自:http://blog.csdn.net/greystar/article/details/47973837 1. 确保环境正常,如出现错误 ,安下载android sdk 相关版本,我在这 ...
- 【MVC 4】7.SportsSore:完成购物车
作者:[美]Adam Freeman 来源:<精通ASP.NET MVC 4> 本文将继续构建 SportsStore 示例应用程序.在上一章中,添加了对购物车的基本支持,现在打 ...