Android设计模式~~~工厂方法模式
来源:互联网 发布:网络主播招聘文案 编辑:程序博客网 时间:2024/06/06 03:05
一.工厂方法模式介绍
是创建设计模式之一。
二. 定义
定义一个用于创建对象的接口,让子类决定实例化那个类。
三. 使用场景
在任何需要生成复杂对象的地方,都可以使用工厂模式。
四. 简单的例子
抽象的产品类
public abstract class Product { public abstract void method();}
具体的产品类A
public class ProductA extends Product { private static final String TAG = "ProductA"; @Override public void method() { Log.d(TAG,"AAAAAAAAAA"); }}具体的产品类B
public class ProductB extends Product { private static final String TAG = "ProductB"; @Override public void method() { Log.d(TAG, "BBBBBBBBBB"); }}抽象工厂
public abstract class Factory { public abstract Product createProductA(); public abstract Product createProductB();}具体工厂
public class ProductFactory extends Factory { @Override public Product createProductA( ) { return new ProductA(); } @Override public Product createProductB() { return new ProductB(); }}具体实现
Product productA = factory.createProductA(); Product productB = factory.createProductB(); productA.method(); System.out.println("-------------------------------------"); productB.method();
log日志:
12-05 10:11:45.846 31120-31120/wang.li.com.factorydemo D/ProductA: AAAAAAAAAA12-05 10:11:45.846 31120-31120/wang.li.com.factorydemo I/System.out: -------------------------------------12-05 10:11:45.846 31120-31120/wang.li.com.factorydemo D/ProductB: BBBBBBBBBB
五. 这个例子很简单,主要分为四大模块,一是抽象工厂,其为工厂模式核心;二是工厂的具体实现;三是抽
象产品,也就是工厂模式创建产品的父类;四是具体产品,为实现抽象产品某个具体的产品对象。
工厂模式大概就是这样工作的,当然我们也可以通过反射来实现,更加的方便,下面修改工厂方法,
如下:
抽象工厂类
public abstract class Factory { /** * 抽象方法 * 具体实现是有调用者决定 * @param tClass 所要产生类型 * @param <T> 所要产生的对象 * @return */ public abstract <T extends Product> T CreateProduct(Class<T> tClass);}具体实现类
public class ProductFactory extends Factory { @Override public <T extends Product> T CreateProduct(Class<T> tClass) { Product product = null; try {// boolean b = Class.forName(tClass.getName()).newInstance() instanceof Product; product = (Product) Class.forName(tClass.getName()).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return (T) product; }}调用代码
Factory factory = new ProductFactory(); ProductA productA = factory.CreateProduct(ProductA.class); ProductB productB = factory.CreateProduct(ProductB.class); productA.method(); System.out.println("-------------------------------------"); productB.method();输出log
12-05 10:39:45.451 24699-24699/wang.li.com.factorydemo D/ProductA: AAAAAAAAAA12-05 10:39:45.452 24699-24699/wang.li.com.factorydemo I/System.out: -------------------------------------12-05 10:39:45.452 24699-24699/wang.li.com.factorydemo D/ProductB: BBBBBBBBBB
好了 工厂模式大概思路就是这样的
0 0
- Android设计模式---工厂方法模式和抽象工厂模式
- Android设计模式系列--工厂方法模式
- android设计模式之工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android中的设计模式-工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android 设计模式 笔记 - 工厂方法模式
- Android设计模式之 工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式~~~工厂方法模式
- Android设计模式-工厂方法模式
- idea注册码
- birt 的动态sql,即多条件查询
- Delphi判断文件是否正在被使用
- ubuntu 下 Genymotion报Unable to load virtualbox engine错误
- 谈谈Retrofit连接https证书问题
- Android设计模式~~~工厂方法模式
- UMDFaces数据集csv文件处理工具
- SPRING BOOT jar linux部署脚本
- Swift 3.0 拨打电话
- ubuntu14.04+cuda8.0+cudnn5.1+caffe+tensorflow 安装教程(二)
- 关于InputStream类的available()方法
- iOS 导航栏自定义 TitleView不居中的问题
- NOIP2016 换教室
- 单点登录原理与简单实现