学习Android中设计模式的笔记和总结(一)

前沿:

       我们都在知识的海洋中航行,有的人容易在茫茫汪洋中迷失方向,比如我。这时候就需要一个引路人给你指引前进的方向。在此感谢高老师的书籍和博客,在学习的过程,我认真做笔记、总结,好记性不如烂笔头,把自己理解的东西写入文章。一方面让自己更加深刻地理解知识;一方面能够分享给有需要的人。

一、介绍

        我们都知道设计模式<<Design Patterns: Elements of ReusableObject-Oriented Software>>,是由GoF(GoF是设计模式4人帮的简称,这4个人分别是Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides)提出来的。这本书号称惊动软件界的经典名著,短短时间内成为最热门的软件设计书籍。

       GoF提出23种设计模式而名声大噪,他们为什么会提出23种设计模式呢,难度是他们凭空想象设计的?工作经验总结的?

       显然不是他们凭空想象的,说到这个问题,就不得不提一个人了,他叫克里斯托弗·亚历山大(Christopher Alexander),奥地利人,著名建筑师,他在1964年出版了一本书——<<Notes on the Synthesis of Form>>,在书中,他提出“形”这个概念,认为建筑师可创造形,来化解环境中互相冲突的需求,使冲突成为和谐的景象。接着,他又提出模式(Pattern)观点,造形和模式引导建筑师逐步创造出新奇的架构。

       GoF受到了<<Notes onthe Synthesis of Form>>的影响,把“形”和“模式”运用到软件设计中,从而提出了著名的23中设计模式。

       GoF只给我们提供了23中设计模式,这23种都是现成的模式。其实设计模式可以有千千万万种,都是通过一个“形”组合而成的,而这个“形”的本质只有一种,表现形式可以不同。

二、形和模式的关系

       想想觉得好牛逼,在用一个例子形象的说明“形”和“模式”的关系吧。

       我们都学过物理,都知道原子和分子,比如说,氢原子是氢的内涵加上原子这个“形”,氧原子是氧的内涵加上原子这个“形”,它们都是特定的内涵加上原子而成的,本质上都是原子,也就是“形”。两个氢原子加一个氧原子,再以特定的空间构造摆放就成了水分子,这个水分子就好比一个“模式”,到了可以应用的层面,就像水可以喝一样。

       回到软件设计中,“形”就是EIT造形,模式就是由EIT通过不同的组合而成,一个EIT的本质由一个基类、一个子类和接口组成。

如下图所示:


图2-1造形和模式的关系图

三、设计模式解析

废话说了这么多,开始进入正题。简要介绍两个设计模式吧。

1、工厂方法


图3-1工厂方法模式图



图3-1显示的是工厂方法模式的设计图,通过设计图,我们知道这里有两个EIT造型。如图3-2所示:


图3-2 工厂方法EIT图

下面,我们来简单分析一下这两个EIT造形如何组合而成工厂方法模式,如图3-3所示:


图3-3 工厂模式分析图

       如图3-3,Creater通过控制反转(IoC)调用ConcreteClient的方法FactoryMethod(),该方法执行new ConcreteProduct()创建ConcreteProduct的对象,调用ConcreteProduct的构造函数,因为ConcreteProduct是Product的子类,所以Product的构造方法也被执行。因此,Product对象的hook_method()方法就可以调用ConcreteProduct的hook_method()的方法啦。

总结:左边EIT造形负责<创建>右边EIT造形的对象(Object)。

就称左边EIT造形为:Factory(工厂)EIT

而称右边EIT造形为:Product(产品)EIT

补充:控制反转(IoC),就像依赖倒置一样,具体依赖于抽象,学过Spring的都知道,Spring的核心就是依赖注入和控制反转。

2、模板方法

GoF的模板方法如图3-4所示:


图3-4 模板方法模式

从图3-4中,我们可以得出只有1个EIT造形。如图3-5所示:


图3-5 模板方法EIT造形图


接着,需要分析这个模式了。如图3-6所示:


图3-6 模板方法分析图

       这里只有一个EIT造形,AbstractClass通过IoC调用子类的方法,在基类中多了一个具体方法TemplateMethod(),这个方法调用基类的PrimitiveOperation1()和PrimitiveOperation2(),供Client调用。所以在模板方法模式中,TemplateMethod()不属于EIT造形的一部分。

四、总结

       本文简单介绍了GoF的设计模式以及设计模式来源的灵感,引入了EIT造形概念,初步介绍了23中设计模式中的工厂方法和模板方法。所讲内容还未涉及到Android中运用到的设计模式,将在接下来的文章中介绍,敬请期待。





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值