一、前言

现在用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-桥接模式的更多相关文章

  1. 总结使人进步,可视化界面GUI应用开发总结:Android、iOS、Web、Swing、Windows开发等

    可视化界面的软件,是21世纪最主流的应用类型了,黑屏控制台的不适合普通用户.   2004年左右的时候,作为普通网民,接触的自然是可视化,准确是Windows那一套.   那个时候,Microsoft ...

  2. 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 ...

  3. 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 ...

  4. JAVA开发的23种设计模式之 --- 桥接模式

    桥接模式 概述:将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化.如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构.    应用场景        实现系统可能有多 ...

  5. 谈谈App的混合开发

    一.概念 App混合开发,顾名思义,是一个开发模式,指的是开发一个App一部分功能用native构建一部分功能用html5构建,英文名叫:Hybrid App. 在几年前就已经出现了App混合开发模式 ...

  6. MAUI与Blazor共享一套UI,媲美Flutter,实现Windows、macOS、Android、iOS、Web通用UI

    1. 前言 距离上次发<MAUI初体验:爽>一文已经过去2个月了,本计划是下半年或者明年再研究MAUI的,现在计划提前啦,因为我觉得MAUI Blazor挺有意思的:在Android.iO ...

  7. Web项目也能一键打包Android、IOS

    随着移动互联网的不断发展,智能手机配置的不断提高,越来越多的年轻人基本都在使用手机,如微信.支付宝等等.已基本成为一种习惯,坐电梯也好.吃饭也好.开车也好,基本都捧着一个手机在那按来按去,开车就不建议 ...

  8. 提高Android和iOS调试编译速度

    http://www.cnblogs.com/findumars/p/7841252.html 提高Android和iOS调试编译速度   如果您使用Delphi开发App,就会遇到:Android和 ...

  9. Appium - Android 对照 iOS

    Appium - Android 对照 iOS 作者: Max.Bai 时间: 2014/10 Appium - Android 对照 iOS Appium 支持Android也支持iOS.可是两者还 ...

随机推荐

  1. Effective Java 16 Favor composition over inheritance

    Inheritance disadvantage Unlike method invocation, inheritance violates encapsulation. Since you don ...

  2. PHP开发第一个扩展

    首先声明:我们要构建的是扩展或者模块名为hello_module.该模块提供一个方法:hello_word. 一.PHP环境的搭建 1)一般使用源码包编译安装,而不是binary包安装.因为使用PHP ...

  3. 【原】基于 HAproxy 1.6.3 Keeplived 在 Centos 7 中实现mysql mariadb galera cluster 集群分发读写 —— 上篇

    前言 有一段时间没有写blogs,乘着周末开始整理下haproxy + keeplived 实现 mysql mariadb galera cluster 集群访问环境的搭建工作. 本文集中讲hapr ...

  4. avahi-daemon启动失败-解决方法-linux

         avahi-daemon是一种Linux操作系统上运行在客户机上实施查找基于网络的Zeroconf service的服务守护进程. 该服务可以为Zeroconf网络实现DNS服务发现及DNS ...

  5. dubbo学习之服务提供者

    1.简介 这里主要记录如何搭建一个spring框架,提供一个dubbo服务,包括详细的步骤. 2.详细步骤 2.1 项目目录结构 2.2 创建maven项目 new --> Web Projec ...

  6. hdu 敌兵布阵(线段树之单点更新)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  7. python django 与数据库的交互

    下载没有任何问题的mysqdb http://www.codegood.com/archives/4 1创建一个新的app. python manage.py startapp books 2 激活a ...

  8. 我所理解的 惠普云 (HP Cloud)

    HP (惠普)于2014年5月27日宣布了它的新的云产品线 HP Helion,并宣布在接下来的两年时间内向该产品线投资10亿美金.应该说这是一笔很大的投入,充分显示了HP 在云这个领域的决心.本文试 ...

  9. [转]VS2015 cordova尝试-camera

    本文转自:http://blog.csdn.net/greystar/article/details/47973837 1. 确保环境正常,如出现错误 ,安下载android sdk 相关版本,我在这 ...

  10. 【MVC 4】7.SportsSore:完成购物车

    作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> 本文将继续构建 SportsStore 示例应用程序.在上一章中,添加了对购物车的基本支持,现在打 ...