设计模式学习笔记----工厂模式
来源:互联网 发布:淘宝怎么找内部优惠券 编辑:程序博客网 时间:2024/06/18 10:47
工厂模式的好处:
通过工厂模式可以将产品的实例化封装起来,调用者不需要关心产品的实例化过程,方便了当开发者对产品的实例化进行修改时,不需让调用者参与。
抽象产品类:
public abstract class Product { public abstract void color();}
具体产品类A:
public class ConcretePrductA extends Product{ @Override public void color() { System.out.println("红色"); }}
具体产品类B:
public class ConcretePrductB extends Product{ @Override public void color() { System.out.println("绿色"); }}
抽象工厂类
public abstract class Factory { public abstract <T extends Product> T createProduct(Class<T> clz);}
具体工厂类
public class ConcreteFactory extends Factory{ @Override public <T extends Product> T createProduct(Class<T> clz) { Product p = null; try{ p = (Product) Class.forName(clz.getName()).newInstance(); }catch (Exception e){ e.printStackTrace(); } return (T)p; }}
上述代码我们通过利用反射来更简洁的生产具体产品对象,只需要在工厂方法的参数列表中传入一个Class类就可以决定究竟是要哪一个产品。
调用方式:
Factory factory = new ConcreteFactory();Product p = factory.createProduct(ConcretePrductA.class);p.color();
除了该种方法还可以通过创建多个具体工厂来生产具体产品,即多工厂方法模式。
public class ConcreteFactoryA extends Factory{ @Override public Product createProduct() { return new ConcretePrductA(); }}
public class ConcreteFactoryB extends Factory{ @Override public Product createProduct() { return new ConcretePrductB(); }}
Factory factoryA = new ConcreteFactoryA();Product pA = factoryA.createProduct();pA.color();Factory factoryB = new ConcreteFactoryB();Product pB = factoryB.createProduct();pB.color();
另外如果确定只需一个工厂类,可以写为:
public class Factory{ public <T extends Product> T createProduct(Class<T> clz) { Product p = null; try{ p = (Product) Class.forName(clz.getName()).newInstance(); }catch (Exception e){ e.printStackTrace(); } return (T)p; }}
该种方法即为简单工厂模式。
阅读全文
0 0
- 设计模式学习笔记之工厂模式
- 设计模式学习笔记--工厂模式
- 【设计模式】简单工厂模式学习笔记
- 【设计模式】工厂方法模式学习笔记
- 设计模式学习笔记之工厂模式
- 学习笔记:设计模式之工厂模式
- 设计模式学习笔记--简单工厂模式
- 设计模式学习笔记-工厂方法模式
- 设计模式学习笔记-抽象工厂模式
- java设计模式学习笔记-工厂模式
- 设计模式学习笔记之工厂模式
- 设计模式学习笔记--简单工厂模式
- 设计模式学习笔记--工厂方法模式
- 设计模式学习笔记--抽象工厂模式
- java设计模式-工厂模式学习笔记
- 设计模式学习笔记-简单工厂模式
- 设计模式学习笔记-工厂方法模式
- 设计模式学习笔记-抽象工厂模式
- 【jzoj5322】【GDOI2017模拟8.21】【小朋友】【状态压缩动态规划】
- dp day4-博弈论
- Fast RCNN学习
- Go1.9组播发送消息小实例
- a_vision_aided_nonlinear_observer_for_fixed_wing_uav_navigation论文解读
- 设计模式学习笔记----工厂模式
- 动画效果
- JZOJsenior3425.【NOIP2013模拟】能量获取
- Java中常见数据结构List之ArrayLis
- 查找对话框
- FM算法(Factorization Machine)
- Java Zip压缩实现
- 台湾大学林轩田机器学习技法课程学习笔记16(完结) -- Finale
- Debug日志:Dev C++ 5.11的 int 型边界测试