设计模式最佳实之工厂模式
来源:互联网 发布:java游戏编程入门 编辑:程序博客网 时间:2024/05/17 06:13
原文地址:设计模式最佳实之工厂模式
What
工厂模式:
是创建型设计模式,用于创建对象的接口,让子类决定new那个类的实例
使用场景:
- 在任何需要生成需要生成复杂对象的地方,都可以考虑使用工程模式
- 复杂对象适合使用工厂模式,用new就可以完成创建的对象则无需使用工厂模式
UML图
How
代码例子
首先定义工厂抽象类
Factory
public abstract class Factory{ /** * 抽象工厂方法 * 具体生产什么产品由子类决定 * return product */ public abstract Product createProduct(Class<T> clz);}
定义工厂实现类,根据传入工厂实现类型生产相应的产品
- 使用反射的方法,减少冗余的工厂实现类
FactoryImp
public class FactoryImp extends Factory{ /** * 具体的工厂 * 根据传入的产品类型返回相应的产品 * return product */ public <T extends Product> createProduct(Class<T> clz){ Product p = null; try{ p = (Product)class.forName(clz.getName()).newInstance(); }catch(Execption e){ } return p; };}
定义产品抽象类
Product
public abstract class Product{ public abstract void method();}
定义产品A
ProductA
public class ProductA extends Product{ public void method(){ System.out.println("I am a product A!!"); }}
定义产品B
ProductB
public class ProductB extends Product{ public void method(){ System.out.println("I am a product B!!"); }}
测试例子:
public static void main(String[] args) { Factory factory = new FactoryImp(); // 生产ProductA Product pA = factory.createProduct(ProductA.class); pA.method(); // 生产ProductB Product pB = factory.createProduct(ProductB.class); pB.method(); }
结果:
I am a product A!!I am a product B!!
总结
- 优点
- 从上面的例子可以看出,工厂模式是一个很好设计模式,能够很好解耦工厂与产品之间关系,通过接口/抽象类指定规范,只需替换相应的实现即可完成替换,很好符合了设计模式原则的开闭原则,对拓展开放,对修改关闭
- 减少
if...elase
形式的硬编码判断,逻辑更加清晰简洁
- 缺点
- 会产生过多的产品类,导致类结构的复杂化,每新增一款产品,就需要写一个新的产品类
如果对我的文章有什么建议的,可以留言给我,我都会回复,并虚心接受,只为把最好的献给最好可爱的你们~
阅读全文
0 0
- 设计模式最佳实之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之---工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之-工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之 ------工厂模式
- 二、用UltraISO软碟通制作启动U盘
- 云管理平台实践指南
- 6、C#的算术运算符和算术表达式
- 类加载-杂
- 前端开发者必须知道的项目资源网站
- 设计模式最佳实之工厂模式
- DeepLearing学习笔记-数据矢量化
- 递归算法应用-牺牲空间换取时间
- CDN安全
- Java Applet与Java Application的区别
- 【实时计算架构系列1】WePay如何基于谷歌云平台(GCP)和kafka实现实时流式欺诈检测
- 代码重用
- Signal ()函数详细介绍 Linux函数
- eclipse 鼠标变成十字选框