android常用的工厂模式,Android的设计模式-简单工厂模式

前言

Android的设计模式系列文章介绍,欢迎关注,持续更新中:java

1.定义

定义一个用于建立对象的接口,让子类决定实例化哪一个类。设计模式

2.介绍

简单工厂模式属于建立型模式。

简单工厂模式又叫作静态工厂方法模式。

3.UML类图

3.1 角色说明:

Product(抽象产品类):要建立的复杂对象,定义对象的公共接口。

ConcreteProduct(具体产品类):实现Product接口。

Factory(工厂类):返回ConcreteProduct实例。

4.实现

4.1 建立抽象产品类,定义公共接口:ide

//抽象产品类

public abstract class Product {

public abstract void show();

}

4.2 建立具体产品类,继承Product类:svg

//具体产品类A

public class ProductA extends Product {

@Override

public void show() {

System.out.println("product A");

}

}

//具体产品类B

public class ProductB extends Product {

@Override

public void show() {

System.out.println("product B");

}

}

4.3 建立工厂类,建立具体的产品:测试

public class Factory {

public static Product create(String productName) {

Product product = null;

//经过switch语句控制生产哪一种商品

switch (productName) {

case "A":

product = new ProductA();

break;

case "B":

product = new ProductB();

break;

}

return product;

}

}

4.4 测试方法:优化

public void test() {

Factory.create("A").show();//生产ProductA

Factory.create("B").show();//生产ProductB

try {

Factory.create("C").show();//生产ProductC

} catch (NullPointerException e) {

System.out.println("没有ProductC");//没有ProductC,会报错

}

}

5.应用场景

生成复杂对象时,肯定只有一个工厂类,可使用简单工厂模式。不然有多个工厂类的话,使用工厂方法模式。

6.优势

代码解耦,建立实例的工做与使用实例的工做分开,使用者没必要关心类对象如何建立。

7.缺点

违背开放封闭原则,若需添加新产品则必须修改工厂类逻辑,会形成工厂逻辑过于复杂。

简单工厂模式使用了静态工厂方法,所以静态方法不能被继承和重写。

工厂类包含了全部实例(产品)的建立逻辑,若工厂类出错,则会形成整个系统都会会受到影响。

8.工厂方法模式与简单工厂模式比较

工厂方法模式有抽象工厂类,简单工厂模式没有抽象工厂类且其工厂类的工厂方法是静态的。

工厂方法模式新增产品时只需新建一个工厂类便可,符合开放封闭原则;而简单工厂模式须要直接修改工厂类,违反了开放封闭原则。

9.简单工厂模式的优化

因为简单工厂模式新增产品时须要直接修改工厂类,违反了开放封闭原则。所以可使用反射来建立实例对象,确保可以遵循开放封闭原则。spa

9.1 反射实现工厂类设计

public class Factory {

public static T create(Class clz) {

Product product = null;

try {

product = (Product) Class.forName(clz.getName()).newInstance();//反射出实例

} catch (Exception e) {

e.printStackTrace();

}

return (T) product;

}

}

9.2 测试方法code

public void test() {

Factory.create(ProductA.class).show();//生产ProductA

Factory.create(ProductB.class).show();//生产ProductB

}

9.3 总结

使用反射来实现工厂类,新增产品时无需修改工厂类,可是使用反射来建立实例对象的话会比正常使用new来建立的要慢。

你可能感兴趣的:(android常用的工厂模式)