您的位置:首页 > 移动开发 > Android开发

《Android源码设计模式》读书笔记 (5) 第5章 工厂模式

2016-02-14 00:11 573 查看

前言

定义

定义:定义一个用户创建对象的接口,让子类决定实例化哪个类

使用场景:需要生成复杂对象的地方,使用该模式,如果用new的对象,就无需使用.例如:activity生命周期,onCreate()等

缺点:每次为工厂方法模式添加新的产品时,就要编写一个新的产品类,同时还要引入抽象层,势必会导致类结构复杂化.

UML类图



根据UML类图,可以把工厂模式分为4大模块:

抽象工厂:抽象父类,提供返回具体产品子类的抽象方法,并由子类具体工厂来实现.

具体工厂:继承抽象工厂,来实现具体业务逻辑,返回具体产品子类

抽象产品:具体产品的父类,亦是提供抽象方法由子类继承来实现.

具体产品:实现抽象产品的某个具体产品对象.

实现步骤

根据书上提供的案例,我们可以通过5步来实现工厂模式构建具体产品子类对象.

这是demo目录截图



1.抽象产品的父类

//抽象产品的父类,所有子类继承与它,提供父类的抽象方法生成不同的子类对象
public abstract class AudiCar {

public abstract void drive();

public abstract void selfNavigation();
}


2.具体子类A


public class CarA extends AudiCar {

@Override
public void drive() {
Log.e(MainActivity.TAQ, "这是一辆Q3");
}

@Override
public void selfNavigation() {
Log.e(MainActivity.TAQ, "Q3自动巡航启动");
}

}


3.抽象工厂类,返回各种继承AudiCar的各种子类对象


public abstract class AudiFactory {
//这里可以学习一下这种类型的代码写法
public abstract <T extends AudiCar> T createAudiCar(Class<T> clz);
}


4.简单工厂模式,继承抽象父类,根据不同产品类型class生创建对象


public <T extends AudiCar> T createAudiCar(Class<T> clz) {
AudiCar car = null;
try {
car = (AudiCar) Class.forName(clz.getName()).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (T) car;
}


5.使用工厂子类来创建不同的产品子类


/*
* 工厂模式创建产品子类A,B
*/
private void createProduct() {
AudiFactory factory = new AudiCarFactory();
CarA a = factory.createAudiCar(CarA.class);

CarB b = factory.createAudiCar(CarB.class);
}


源码下载

点击下载Android简单工厂模式源码demo,http://download.csdn.net/detail/qq_28690547/9430899
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息