设计模式——工厂方法模式
1.工厂方法模式详情
工厂方法模式(Factory Pattern)属于创立型设计模式。结构简单,平常开发中应用广泛,但是容易被忽视。
2.工厂方法模式定义
定义一个用于创立对象的接口,让子类决定实例化哪个类。
3.工厂方法模式使用场景
在任何需要生成复杂对象的地方,都可以使用!复杂的对象适合使用工厂模式,只用new即可以完成创立的对象不需要使用。
4.工厂方法模式UML类图
图片来自网络
四大板块:
- Creator(笼统工厂):为工厂方法模式的核心
public abstract class Creator{ //笼统工厂方法,具体生产什么由子类决定 public abstract Product createProduct();}- ConcreteCreator(具体工厂):实现了具体的业务逻辑
public class ConcreteCreator extends Creator{ @Override public Product createProduct(){ return new ConcreteProductA(); }}- Product(笼统产品):是工厂方法模式创立的产品的父类
public abstract class Product{ //产品类的笼统方法,由具体产品类去实现 public abstract void method();}- ConcreteProduct(具体产品):实现笼统产品的某个具体产品的对象
public class ConcreteProductA extends Product{ @Override public void method(){ System.out.println("我是具体产品A") }} public class ConcreteProductB extends Product{ @Override public void method(){ System.out.println("我是具体产品B") }}开始生产
创立用户类
public class Client{ public static void main(...){ Creator creator = new Creator(); Product p = creator.createProduct(); p.method; }}在具体工厂类中生产产品
public class ConcreteCreator extends Creator{ //根据需要生产产品A或者者B @Override public Product createProduct(){ return new ConcreteProductA(); //return new ConcreteProductB(); }}以上是比较常见的完整工厂方法模式的创立及使用,但我们利用反射可以更简洁的生产具体产品
5.利用反射简化生产过程
在工厂方法的参数列表中传入一个Class类来决定是哪一个产品类
public abstract class Creator{ //笼统工厂方法,具体生产什么由子类决定 public abstract <T extends Product> T createProduct(Class<T> clz);}具体工厂类,需要通过反射获取类的示例
public class ConcreteCreator extends Creator{ @Override public <T extends Product> T createProduct(Class<T> clz){ Product p = null; try{ p = (Product) Class.forName(clz.getName()).newInstance(); } catch (Exception e){} return (T) p; }}用户类的实现
public class Client{ public static void main(...){ Creator creator = new Creator(); Product p = creator.createProduct(ConcreteProductB.class); p.method; }}需要哪个类的对象在调用处传入哪个类的类型就可,简单动态!
6.优缺点
- 优点:完全符合设计准则,降低了对象之间的耦合度。依赖于笼统架构,将实例化任务交给子类完成,有非常好的扩展性。
- 缺点:每次增加新产品就要编写一个新的产品类,同时还要引入笼统层,会导致类结构的复杂化。
7.总结
工厂方法模式是一个很好的设计模式,但是在某些简单的情况,能否要强制使用还需要权衡。
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 设计模式——工厂方法模式
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 设计模式——工厂方法模式