设计模式 (2) ——工厂方法模式 <IT小鸟每日一遍>
来源:互联网 发布:今天淘宝怎么用不了了 编辑:程序博客网 时间:2024/05/16 15:47
工厂方法模式,意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。
工厂模式 思想是一个抽象产品类,一个抽象工厂类。一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例。
先看抽象产品类
package com.wanq.designmode.factory;/** * @author-WanQ * @创建时间:2013-3-24 下午03:47:49 * @类说明: * 产品类 */public abstract class Product {// 产品类的公共放方法public void method1(){}// 抽象方法public abstract void method2();}具体产品类
package com.wanq.designmode.factory;/** * @author-WanQ * @创建时间:2013-3-24 下午03:50:21 * @类说明: * 具体产品类 */public class ConcreateProduct1 extends Product {@Overridepublic void method2() {// TODO Auto-generated method stub// 业务逻辑处理}}抽象工厂类
package com.wanq.designmode.factory;/** * @author-WanQ * @创建时间:2013-3-24 下午03:52:01 * @类说明: * 抽象工厂类 */public abstract class Creator {/** * 创建一个产品对象时,其输入参数类型可以自行定义 * @param <T> * @param c * @return */public abstract <T extends Product> T creatoProduct(Class<T> c);}
具体工厂类
package com.wanq.designmode.factory;/** * @author-WanQ * @创建时间:2013-3-24 下午03:54:51 * @类说明: * 具体工厂类 */public class ConcreateCreator extends Creator {@Overridepublic <T extends Product> T creatoProduct(Class<T> c) {// TODO Auto-generated method stubProduct product = null;try {product = (Product)Class.forName(c.getName()).newInstance();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return (T)product;}}
调用的方法
package com.wanq.designmode.factory;/** * @author-WanQ * @创建时间:2013-3-24 下午03:57:24 * @类说明: * */public class Client {public static void main(String[] args){Creator creator = new ConcreateCreator();Product product = creator.creatoProduct(ConcreateProduct1.class);// 处理业务逻辑product.method2();}}
工厂模式 扩展
************************************
1.简单工厂模式 不需要抽象工厂,直接通过简单工厂模式得到产品对象
************************************
简单工厂类
package com.wanq.designmode.factory.simpleFactory;import com.wanq.designmode.factory.ConcreateProduct1;import com.wanq.designmode.factory.Product;/** * @author-WanQ * @创建时间:2013-3-24 下午04:25:10 * @类说明: * 简单工厂类 */public class SimpleCreator {public static <T extends Product> T creatoProduct(Class<T> c){Product product = null;try {product = (Product)Class.forName(c.getName()).newInstance();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return (T)product;}}
应用场景
package com.wanq.designmode.factory.simpleFactory;import com.wanq.designmode.factory.ConcreateProduct1;import com.wanq.designmode.factory.Product;/** * @author-WanQ * @创建时间:2013-3-24 下午04:29:48 * @类说明: * */public class Client {public static void main(String[] args){Product product = SimpleCreator.creatoProduct(ConcreateProduct1.class);// 处理业务逻辑product.method2();}}
************************************
2.延迟加载工厂模式 通过该工厂生产的对象,用过后不会立即释放掉,放在缓存中,等待下次使用。
************************************
延迟加载工厂
package com.wanq.designmode.factory.lazyInit;import java.util.HashMap;import java.util.Map;import com.wanq.designmode.factory.ConcreateProduct1;import com.wanq.designmode.factory.ConcreateProduct2;import com.wanq.designmode.factory.Product;/** * @author-WanQ * @创建时间:2013-3-24 下午04:36:49 * @类说明: * 延迟加载的工厂类 */public class ProductFactory {private static final Map<String,Product> proMap = new HashMap<String, Product>();public static Product createProduct(String type) {Product product = null;if(proMap.containsKey(type)){product = proMap.get(type);}else{if(type == "Product1"){product = new ConcreateProduct1();}else{product = new ConcreateProduct2();}// 同时把对象放到缓存里proMap.put(type, product);}return product;}}
- 设计模式 (2) ——工厂方法模式 <IT小鸟每日一遍>
- 设计模式 (3) ——抽象工厂模式 <IT小鸟每日一遍>
- 设计模式 (1) ——单例模式 <IT小鸟每日一遍>
- 设计模式 (4) ——模板模式 <IT小鸟每日一遍>
- 设计模式 (5) ——建造者模式 <IT小鸟每日一遍>
- 设计模式 (6) ——代理模式 <IT小鸟每日一遍>
- 数据结构 (2) ——树 <IT小鸟每日一遍>
- 数据结构 (3) ——排序 <IT小鸟每日一遍>
- 【每日一记】设计模式——工厂模式
- 每日设计模式——工厂方法模式
- 数据结构 (1) ——线性表 <IT小鸟每日一遍>
- 《每日编程》----《设计模式》----《一》----工厂方法模式和抽象工厂模式
- 【每日一记】设计模式——模板方法模式
- 初学javascript设计模式(一)工厂模式第二遍阅读
- 设计模式之(一)——工厂方法模式
- Java设计模式(一) 设计模式初探——简单工厂和工厂方法模式
- 每日设计模式——抽象工厂模式
- 设计模式—工厂方法
- vs2010新加一个多工程的解决方案
- 在MFC中添加用户自定义消息
- 小甲鱼PE详解之区块表(节表)和区块(节)续(PE详解05)
- C++中多态的实现
- IO 包中的常见对象
- 设计模式 (2) ——工厂方法模式 <IT小鸟每日一遍>
- 云端融合之于产业界
- 吐血、、、关于小Q的穿越问题
- 更改linux下oracle字符编码
- 小甲鱼PE详解之区块描述、对齐值以及RVA详解(PE详解06)
- 控制系统与手机的无线传输
- linux文件权限
- 操作数组的流对象
- 控制台输出有空行的文件,输出时保留空行