移动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)

时间: 2024-08-24 12:03:30

移动APP为什么要开发两套Android和IOS-桥接模式的相关文章

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

可视化界面的软件,是21世纪最主流的应用类型了,黑屏控制台的不适合普通用户. 2004年左右的时候,作为普通网民,接触的自然是可视化,准确是Windows那一套. 那个时候,Microsoft Windows 98,红警,QQ是3个印象深刻的软件. 大学之后,入了行,先后学习了Windows程序设计(C语言API开发).MFC.Java Swing,Html Web,Android和iOS. 总的来说,现在Html web和Java Swing要熟悉一些,Android和iOS的界面在深入学习中

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

桥接模式 概述:将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化.如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构.    应用场景        实现系统可能有多个角度分类,每一种角度都可能变化.    解释:桥接模式将继承模式转化成关联关系,他降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量.    理解抽象化,实现化,解耦        抽象化:将复杂物体的一个或几个共同的特性抽出去而只注意其他特性的行动或过程.在java面向对象中抽象化就

信用卡智能养卡系统app源码开发运营与贴牌oem思路模式

1.我的需求和我想要的模式 我们脑海中的这个系统是长什么样的,一个系统的UI就像他的脸一样,既然我们做平台,那肯定是要有用户来使用我们的产品,那么这个用户体验度就很重要了,而这个UI界面就是用户打开这个app的第一印象,如果UI设计的好,也能提升用户的粘性,让用户愿意使用你的app.2.APP开发团队的选择 很多养卡软件应用软件开发公司内部成员包括设计师.技术人员等,都是一些没有经验或者缺乏经验的,那这样效果自然就不会太理想;另外一些专业的帮你还APP应用软件开发公司,会聘请一些专业性比较强的人

Appium - Android 对照 iOS

作者: Max.Bai 时间: 2014/10 Appium - Android 对照 iOS Appium 支持Android也支持iOS.可是两者还有非常大的差别,我使用Appium一个多月,刚開始是Android,后面才用iOS.所以做iOS自己主动化的时候比Android艰难多了,后来才发现这两个的模式有一定的差别. (当然可能是我Mac的基础太差)就以我在理解浅显的描写叙述下两者的差别. Appium Android 工作模式(例如以下经验不过我在windows上的经验.mac上只用了

Appium - Android 对比 iOS

作者: Max.Bai 时间: 2014/10 Appium - Android 对比 iOS Appium 支持Android也支持iOS,但是两者还有很大的区别,我使用Appium一个多月,刚开始是Android,后面才用iOS,所以做iOS自动化的时候比Android艰难多了,后来才发现这两个的模式有一定的差别.(当然可能是我Mac的基础太差)就以我在理解浅显的描述下两者的区别. Appium Android 工作模式(如下经验仅仅是我在windows上的经验,mac上只用了ios,如有说

提高Android和iOS调试编译速度

如果您使用Delphi开发App,就会遇到:Android和iOS的编译实现是太慢了,尤其是debug.这个小技巧使得编译Debug能快不少. 可能你已经知道了这个方法,如果这样设置,那一定为之开心. 您认为Release版本比Debug版本编译需要更长时间,因为它必须执行一堆代码优化阶段,告诉你,实际情况与此相反,在Debug模式下构建适用于iOS或Android的我的应用程序大概需要7.5 分钟,在Release模式下构建相同的应用程序不到1分钟.(当然,与建立相同的Windows应用程序相

仿一号店APP商品分类效果开发(Android和IOS)

好久没写博客了,一方面这段时间公司的事情项目比较多,另一方面自己也有准备成立自己的个人工作室,所以一直没顾得上去总结写一下技术博客,今天正好有点时间就来一篇吧. 这段时间一直在进行开发商城的APP(Android和IOS),也研究一下国内绝大多数的电商APP(例如:淘宝,京东,天猫,苏宁易购,顺丰优选等等),他们的商品分类其实大多数属于常见格调:列表-点击二级列表-具体三级分类列表.唯有看了一号店IOS端的APP,感觉还不错.一级格子分布,点击item,中间显示二级分类.然后我们团队决定仿照该效

[编译] 6、开源两个简单且有用的安卓APP命令行开发工具和nRF51822命令行开发工具

星期四, 27. 九月 2018 12:00上午 - BEAUTIFULZZZZ 一.前言 前几天给大家介绍了如何手动搭建安卓APP命令行开发环境和nRF51822命令行开发环境,中秋这几天我把上面篇文章的操作流程全部做成了shell脚本,使得可以让其他人简单运行下脚本.就能够直接建立绿色开发环境,岂不美哉? <[编译] 5.在Linux下搭建安卓APP的开发烧写环境(makefile版)-- 在Linux上用命令行+VIM开发安卓APP> <[编译] 4.在Linux下搭建nRF518

Google正着手开发一套重新设计的Android系统,统一整合应用和服务的用户体验

<<<-------------  <_< 向左看 根据ibtimes的消息,Google正在计划统一整合Android应用和服务的设计元素,推出名为"Quantum Paper"(量子纸)的设计语言. 消息称,Google正在着手开发一套经过完全重新设计的Android系统,革新程度堪比苹果iOS 7. 这一重大更新计划名为"Quantum Paper",它将影响Google平台上的所有产品和服务.不论接入Google服务的是何种设备