【设计模式】工厂模式

工厂模式是一种创建型设计模式。

开闭原则

开闭原则是设计模式原则之一,倡导实体应当对扩展开发,对修改关闭。
意思是说,你想要扩展或者修改已写好代码的功能,可以往里面加入新的代码,但不允许修改修改以前已经写好的代码
高耦合将会导致,拓展功能时,不得不修改以前的代码。
比如

public class Service {
    Dao dao = new JpaDao(); 
    void service(){
    	//使用dao进行一系列持久层操作
    }
}

起初我们使用JPA作为ORM,将数据库操作都封装在JpaDao里面,通过new来创建JpaDao实例。如果要把JPA改成Mybatis,就需要逐个去修改用到JpaDao的Service类。这就是Service和Dao的紧耦合导致违反开闭原则。
为什么会紧耦合?是因为Service中直接new了一个非常具体的对象。

new操作本身就是一个耦合操作

引入工厂类

想要解耦,就得去掉new,但是要创建对象就必须得new。所以我们将new换个地方,创建一个工厂类。

public class DaoFactory {
    public static Dao getDao() {
        return new JpaDao(); 
    }
}
public class Service {
    Dao dao = DaoFactory.getDao(); 
    void service(){
    //使用dao进行一系列持久层操作
    }
}

这样的好处就是,后续不管更换什么持久层框架,只需要改工厂类里的代码一个地方就好。
但是根本问题还是没解决,还是违反了开闭原则。因为到时候还是得改DaoFactory的代码。
如何才能不改代码修改实现方法?可以将类名写在配置文件,通过反射创建对象。这样就把耦合从代码提到了配置文件。

dao=com.example.demo.pattern.factory.JpaDao

public class DaoFactory {
    public static Dao getDao() {
    	Properties properties = new Properties();
    	properties.load(DaoFactory.class.getClassLoader().getResourceAsStream(“config.properties”));
    	Class<?> dao = Class.forName((String) properties.get("dao"));
    	return (Dao) dao.newInstance();
    }
}

简单工厂模式

简单工厂模式,又叫静态工厂模式。顾名思义,就是通过静态方法获取实例。

public class Factory {
    public static <R,P> R getInstance(P type){
        //根据传入的type不同做if else判断返回不同类型的对象。
    }
}
pu
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值