Android设计模式之美---Factory Method

转载请标明出处:
http://blog.csdn.net/coder_nice/article/details/46990317

本文为阅读高焕堂老师的《android设计招式之美》后,整理出来的自己的理解。

Template Method 模式图

这里写图片描述
如果是简单的对象,那么我们随时用到ConcreteProduct随时new就可以,然而加上业务逻辑之后对象是不可能很简单的。

在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,使得调用者根本无需关心产品的实例化过程,只需依赖工厂即可得到自己想要的产品。

class Engine {  

    public void getStyle(){  

        System.out.println("这是汽车的发动机");  

    }  

}  

class Underpan {  

    public void getStyle(){  

        System.out.println("这是汽车的底盘");  

    }  

}  

class Wheel {  

    public void getStyle(){  

        System.out.println("这是汽车的轮胎");  

    }  

}  

public class Client {  

    public static void main(String[] args) {  

        Engine engine = new Engine();  

        Underpan underpan = new Underpan();  

        Wheel wheel = new Wheel();  

        ICar car = new Car(underpan, wheel, engine);  

        car.show();  

    }  

}

可以看到,调用者为了组装汽车还需要另外实例化发动机、底盘和轮胎,而这些汽车的组件是与调用者无关的,严重违反了迪米特法则,耦合度太高。并且非常不利于扩展。另外,本例中发动机、底盘和轮胎还是比较具体的,在实际应用中,可能这些产品的组件也都是抽象的,调用者根本不知道怎样组装产品。假如使用工厂方法的话,整个架构就显得清晰了许多.
(迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个
对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD. )

这里写图片描述

这是由Client类别的FactoryMethod()来负责创建ConcreteProduct 子类别的对象,这是可行的

下面是流程图
这里写图片描述

这里写图片描述

这里写图片描述

GOF的Factory Method 模式图

这里写图片描述

这里写图片描述
这里写图片描述

这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述

可以看的出来,框架里面的Client和Product是稳定不变的,不需改变就能搭配新的应用类别,这就发挥了应用框架的职能:确保不变的抽象类能随时与多遍的应用类别相搭配,然后组合出各种应用软件。即使未来有需要更改子类(上图的IntegerNumber类别名称)也只需要更改FactoryMethod()函数内的new IntegerNumber()指令而已。

这里写图片描述
这里写图片描述

这是Activity创建的流程图
这里写图片描述

创建Activity是极其复杂的过程,一句两句无法说清楚,比如我们把绿色圆圈内抽象成一个过程,而不去关注他。
这里写图片描述

此图中的绿色圆圈就是上图中的绿色圆圈,这就是android中对于Template method和factory method的结合使用。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高焕堂老师Android设计招式之美简体中文版,全书共15章节。 第 1 章 設計樣式與Android框架設計, 7 1.1 設計與樣式(即招式) 1.2 簡介設計樣式(Design Pattern) 1.3 從亞歷山大的建築樣式到GoF設計樣式 1.4 舉例說明應用框架之意義 1.5 舉例說明框架設計基本思維:「變與不變之分離」 1.6 欣賞Android裡的13項設計樣式 第 2 章 Android框架與應用類別的接合:卡榫(Hook)函數, 39 2.1 前言 2.2 何謂卡榫(Hook)函數 2.3 Android的卡榫函數範例(一) 2.4 Android的卡榫函數範例(二) 2.5 Android的卡榫函數範例(三) 2.6 卡榫函數與樣式之關係 ---- 以Factory Method 和Template Method樣式為例 第 3 章 Template Method樣式, 63 3.1 複習:「變與不變之分離」原則 3.2 複習:「變與不變之分離」手藝 3.3 複習:框架的反向控制 3.4 介紹Template Method樣式 3.5 Android框架與Template Method樣式 第 4 章 Factory Method樣式, 95 4.1 Factory Method樣式美何在? 4.2 介紹Factory Method樣式 4.3 Android框架與Factory Method樣式 第 5 章 Observer樣式, 115 5.1 Observer樣式美何在? 5.2 介紹Observer樣式 5.3 Android框架與Observer樣式 第 6 章 Abstract Factory樣式, 135 6.1 Abstract Factory樣式美何在? 6.2 介紹Abstract Factory樣式 6.3 Android框架與Abstract Factory樣式 第 7 章 Adapter樣式, 151 7.1 Adapter樣式美何在? 7.2 介紹Adapter樣式 7.3 Android框架與Adapter樣式 第 8 章 Composite樣式, 181 8.1 Composite樣式美何在? 8.2 介紹Composite樣式 8.3 Android框架與Composite樣式 第 9 章 Strategy樣式, 199 9.1 Strategy樣式美何在? 9.2 介紹Strategy樣式 9.3 Android框架與Strategy樣式 第 10 章 State樣式, 213 10.1 State樣式美何在? 10.2 介紹State樣式 10.3 Android框架與State樣式 第 11 章 Proxy樣式, 237 11.1 Proxy樣式美何在? 11.2 介紹Proxy樣式 11.3 Android框架與Proxy樣式 第 12 章 Bridge樣式, 277 12.1 Bridge樣式美何在? 12.2 介紹Bridge樣式 12.3 Android框架與Bridge樣式 第 13 章 Iterator樣式, 301 13.1 Iterator樣式美何在? 13.2 介紹Iterator樣式 13.3 Android框架與Iterator樣式 第 14 章 Mediator樣式, 323 14.1 Mediator樣式美何在? 14.2 介紹Mediator樣式 14.3 Android框架與Mediator樣式 第 15 章 Façade樣式, 343 15.1 Façade樣式美何在? 15.2 介紹Façade樣式 15.3 Android框架與Façade樣式 第 16 章 Android框架之美 ---- Android帶給IT產業的啟示, 375 16.1 Android美何在? 16.2 Android對兩河流域硬體業之意義 16.3 Android對兩河流域軟體業之意義 16.4 Android與「軟硬整合」之路 16.5 結語
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值