首页 > 其他 > 详细

工厂模式

时间:2018-09-20 00:02:22      阅读:191      评论:0      收藏:0      [点我收藏+]

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。

一个通用栗子如下:

 1 //抽象产品类
 2 public abstract class Product{
 3     public void method1(){}
 4     public void method2(){}
 5 }
 6 //具体产品类
 7 public class ConcreateProduct1 extends Product{
 8     public void method1(){}
 9 }
10 public class ConcreateProduct2 extends Product{
11     public void method2(){}
12 }
13 //抽象工厂类
14 public abstract class Creator{
15     //创建一个产品对象,其输入参数类型可以自行设置
16     //可以为String,Enum,Class等 也可以为空
17     public abstract <T extends Product> T createProduct(Class<T> c);
18 }
19 //由具体工厂类产生具体的产品对象
20 public class ConcreateCreator extends Creator{
21     public <T extends Product> T createProduct(Class<T> c){
22         Product  product = null;
23         try{
24             product = (Product)Class.forName(c.getName()).newInstance();
25         }catch(Exception e){
26             //异常处理
27         }
28         return (T)product;
29 }
30 //场景调用方法
31 public class Client{
32     public static void main(String[] args){
33         Creator creator = new ConcreateCreactor();
34         Product product = creator.createProduct(ConcreateProduct1 .class);
35     }
36 }

上述只是一个简单示例,根据需要可自由扩展,工厂模式有以下优点:

  • 具有良好封装性,代码结构清晰。只要给定一个类名或约束字符串就可以得到一个具体对象,封装了复杂的创建过程,降低了耦合性;
  • 良好的扩展性,是一个典型的解耦框架。适当修改工厂类或简单的扩展,就可以应对产品类的变化,符合迪米特原则、依赖倒置原则、里氏替换原则;
  • 屏蔽产品类。不关心产品类的变化,只关注产品的接口,比如使用JDBC连接数据库,当从MYSQL迁移到ORACLE时,只需要修改下驱动名称即可,方便又灵活。

 

工厂模式

原文:https://www.cnblogs.com/loveBolin/p/9678318.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!