java设计模式系列分享,看完你不懂,那就是我的错了。
一、工厂模式的思想
- 实例化对象用工厂方法代替new操作
- 将选择实现类、创建对象统一管理和控制,从而将调用者跟我们的实现类解耦
我的白话文解释: 1.什么叫工厂? 工厂就是批量生产的地方,你只需提交所需货物的厂单(产品数据参数等),该厂就能够生产你所需的东西。
二、工厂模式分类
- 简单工厂模式
- 抽象工厂模式
- 工厂方法模式
一看这么多,是不是怕了咧,反正都是工厂模式,你掌握它的思想就不用担心了
三、代码说话(以简单工厂模式为例)
简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,接收的参数不同(或调用的方法不同)来返回不同的对象实例
- 没有工厂的情况下(也就是一般操作)
package mode_study;
/**
* 工厂模式的核心:
* 1.实例化对象用工厂方法代替new操作
*2.将选择实现类、创建对象统一管理和控制,从而将调用者跟我们的实现类解耦
* @author 放牛娃学编程(微信公众号)
*
*/
//定义一个汽车接口
interface Car{
public void getName();
}
//定义宝马车类
class bM implements Car{
@Override
public void getName() {
// TODO Auto-generated method stub
System.out.println("我是宝马车啦啦,我由放牛娃生产");
}
}
//再定义一个奔驰车类
class bChi implements Car{
@Override
public void getName() {
// TODO Auto-generated method stub
System.out.println("我是奔驰车哟!,我也由放牛娃生产");
}
}
public class Factory_study {
public static void main(String[] args) {
// TODO Auto-generated method stub
//开始创建实例(没有工厂的情况)
// Car bM = new bM();
// bM.getName();
// Car bChi = new bChi();
// bChi.getName();
//这样也可以创建,其实跟上面是一样的
new bM().getName();
new bChi().getName();
}
}
分析: 假设我们有很多种汽车,那我们创建实例的时候是不是要在客户端new很多下,那它为什么不好呢?
- 因为当你想更换对象时,你就必须修改客户端中的执行代码
- 我们最关心的是如何取得Car接口对象,至于说这个接口对象是被谁实例化的,那不是客户端的工作 (难道你每次使用电脑,都非要搞懂电脑是如何运行的你才肯用吗??)
- 加个工厂类
//定义一个工厂类
class carFactory{
public static Car getCar(String name)
{
if(name == "宝马")
{
//返回宝马实例
return new bM();
}
else if(name == "奔驰")
{
//返回奔驰实例
return new bChi();
}
else
{
//如果还有接口的实现类,那就可以继续往下加
return null;
}
}
}
主函数:
public class Factory_study {
public static void main(String[] args) {
// TODO Auto-generated method stub
carFactory carfactory = new carFactory();
carfactory.getCar("宝马").getName();
carfactory.getCar("奔驰").getName();
}
}
分析: 1. 有了工厂之后,我不需要每次要一款汽车都new一下,让new的工作交给工厂,我需要什么,工厂就替我生产什么。(这样不香吗,哈哈哈)
2. 通过一个工厂类就可以简单快速的创建对象。
四、优缺点
优点:
- 简化创建流程,一步到位
- 屏蔽创建过程
缺点:
- 低扩展性,违背开闭原则
- 容易造成代码臃肿,不移维护
缺点可以在其它两种的工厂模式中得到改善,有兴趣的可以去看看相关博文。
五、分享交流
最后有兴趣一起交流的,可以关注我的公众号:这里你能够学到很实用的技巧,不是常用的我不说,公众号回复提取码即可获取以下学习资料啦啦啦啦,喜欢就拿去吧!!
(链接时常会失效,若出现此类情况,可以加我微信:17722328325(加时请备注:学习资料))
-
Java web从入门到精通电子书
-
Python机器学习电子书
-
Python400集(北京尚学堂)
-
JavaScript项目案例、经典面试题
-
Java300集(入门、精通)
-
Java后端培训机构录集(同事培训内部提供)