121 项目 028 笔记向 设计模式 工厂方法模式
2017-03-19 00:00
267 查看
工厂方法模式定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。类图:
Product负责定义产品的共性,实现对事件最的最抽象的定义,
Creator为抽象创建类,也就是抽象工厂,具体的创建由实现工厂
ConcreteCreatetor完成。
一个通用方式
抽象工厂类:AbstractProductFactorypackage com.laolang.dp.factory; public abstract class AbstractProductFactory { /** * 创建一个产品对象 * @param t 创建参数 * @param <T> 创建的产品 * @return */ public abstract <T extends AbstractProduct> T createProduct ( Class<T> t ); }
工厂实现类:ProductFactory
package com.laolang.dp.factory; public class ProductFactory extends AbstractProductFactory { @Override public <T extends AbstractProduct> T createProduct(Class<T> t) { AbstractProduct product = null; try { product = (AbstractProduct) Class.forName(t.getName()).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return (T)product; } }
抽象产品类:AbstractProduct
package com.laolang.dp.factory; public abstract class AbstractProduct { // 产品类的公共方法 public void methodOne(){} // 抽象方法 public abstract void methodTwo(); }
产品实现类:ConcreteProductOne
package com.laolang.dp.factory; public class ConcreteProductOne extends AbstractProduct{ @Override public void methodTwo() { System.out.println("产品一"); } }
使用
package com.laolang.dp.factory; import org.junit.Test; public class FactoryTest { @Test public void testOne(){ ProductFactory productFactory = new ProductFactory(); ConcreteProductOne productOne = productFactory.createProduct(ConcreteProductOne.class); ConcreteProductTwo productTwo = productFactory.createProduct(ConcreteProductTwo.class); } }
优点
良好的封装性良好的扩展性
屏蔽产品类的具体实现
解耦
使用场景
客户端不知道它要创建的具体是哪一个子类。一个类想要由自己的子类来定义某对象的创建过程。
类将创建某对象的职责代理给一些帮助子类中的一个,并且你想要将哪一个子类作为代理的信息进行局部化。
最佳实践
熟能生巧相关文章推荐
- 121 项目 027 笔记向 设计模式 单例模式
- 121 项目 029 笔记向 设计模式 抽象工厂模式
- 121 项目 030 笔记向 设计模式 模板方法模式
- 121 项目 026 笔记向 设计模式 笔记
- 设计模式学习笔记——工厂方法模式
- 【设计模式】工厂方法模式学习笔记
- 设计模式学习笔记——工厂方法模式
- 设计模式笔记之---工厂方法模式
- java设计模式学习笔记(二)--工厂方法模式
- PHP设计模式——工厂方法模式(研磨设计模式学习笔记)
- 设计模式学习笔记二:工厂方法模式(Factory Method)
- 设计模式笔记--工厂方法模式
- 设计模式之02工厂方法模式(笔记)
- 步步为营 .NET 设计模式学习笔记 二十四、Factory Method(工厂方法模式)
- 设计模式学习笔记(2) - 工厂方法模式
- 设计模式笔记 4.Factory Method 工厂方法模式(创建型模式)
- java 设计模式 学习笔记 (2) - 工厂方法模式
- 设计模式笔记(5)---工厂方法模式(创建型)
- 设计模式之-工厂方法模式(学习分析笔记)
- Java设计模式笔记(2)工厂方法模式