设计模式-工厂方法模式
来源:互联网 发布:c语言去掉字符串结束符 编辑:程序博客网 时间:2024/05/29 18:27
设计模式-工厂方法模式
算是看书的笔记并非原创,总结:
工厂方法模式定义
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法模式的使用场景
首先,工厂方法模式是new一个对象的替代品,所以中所有需要生产对象的地方都可以使用,单是需要慎重考虑是否要增加一个工厂类进行管理,增加代码的复杂度。
- 调用者不知道它要创建的是那一个子类
- 一个类想要有自己的子类来定义某对象的创建过程
- 类将创建某对象的职责代理给一些帮助子类中的一个,并且你想要将哪一个子类作为代理的信心进行局部化
代码清单
抽象产品类
public abstract class product { //产品类的公共方法 public void method1(){ System.out.println("产品类的公共方法业务逻辑"); } public abstract void method2();}
具体产品类
public class ProductOne extends product { @Override public void method2() { // TODO Auto-generated method stub System.out.println("ProductOne method2 ********"); }}public class ProductTow extends product { @Override public void method2() { // TODO Auto-generated method stub System.out.println("ProductTow method2 *********"); }}
抽象工厂类
public abstract class Creator { public abstract <T extends product> T CreatorProduct(Class<T> c);}
具体工厂类
public class CreatorFactory extends Creator { @Override public <T extends product> T CreatorProduct(Class<T> c) { // TODO Auto-generated method stub product pro = null; try { pro = (product)Class.forName(c.getName()).newInstance(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return (T) pro; }}
场景类
public static void main(String[] args) { CreatorFactory factory = new CreatorFactory(); product productOne = factory.CreatorProduct(ProductOne.class); productOne.method1(); productOne.method2(); product producttow = factory.CreatorProduct(ProductTow.class); producttow.method1(); producttow.method2(); }
工厂方法模式的扩展
1,缩小为简单工厂模式
2,升级为多个工厂类
3,代替单例模式
4,延迟初始化
0 0
- 设计模式--工厂方法
- 工厂方法设计模式
- 设计模式-工厂方法
- 【设计模式】【工厂方法】
- 设计模式 - 工厂方法
- 工厂方法设计模式
- 工厂方法设计模式
- 【设计模式】工厂方法
- 设计模式--工厂方法
- 设计模式---工厂方法
- 设计模式-工厂方法
- 工厂方法设计模式
- 工厂方法设计模式
- 设计模式-工厂方法
- 设计模式 工厂方法
- 工厂方法设计模式
- 工厂方法设计模式
- 设计模式 - 工厂方法
- Android,找工作,月薪2万怎么做?
- build 并deploy saiku-query0.1到nexus
- 快速检测一个字符数组中是否有重复的字符
- 直线检测透视变换
- stdlib.h
- 设计模式-工厂方法模式
- [从头学声学] 第209节 双音节声音
- 如何提取PDF文件中的图片
- mac os x下安装homebrew
- window.onresize根据不同浏览器宽度实时调用不同的代码
- 局部变量和全局变量
- Android学习规划
- 69道Spring面试题和答案
- 为什么选用 React 创建混合型移动应用?