目录
工厂模式是什么?
简单工厂模式小案例
提出问题:简单工厂模式,把简简单单的一个new,写的这么复杂,到底有什么好?
总结一下简单工厂模式的缺点:
代码
工厂模式是什么?
讲解工厂模式之前,我们先来了解一下工厂是干什么的。
简单来说,就是集中高效的生产商品。
也就是说,在编程中,工厂模式,就是效仿工厂,进行集中、高效实例化对象。(实例化就是生产商品)
简单工厂模式小案例
首先,咱们先来确定一下要干什么。
1. 创建一个工厂——江南皮革厂(皮革工厂)。
2. 江南皮革厂要生产一些皮制品。
3. 皮制品包括真皮钱包和貂皮大衣。
4. 找个消费者来消费。
江南皮革厂
package factory.simpleFactory;
public class 江南皮革厂 {
public static Skin getSkin(String name) {
if(name.equals("真皮钱包")) {
return new Wallet("真皮钱包","800¥");
}else if(name.equals("貂皮大衣")) {
return new Coat("貂皮大衣","80000¥");
}else {
return null;
}
}
}
皮制品要遵守一定的规范——要有名字和价格
package factory.simpleFactory;
public interface Skin {
public void name();
public void pice();
}
皮革制品1——真皮钱包
package factory.simpleFactory;
public class Wallet implements Skin {
public String name;
public String pice;
public Wallet(String name ,String pice) {
this.name=name;
this.pice=pice;
}
@Override
public void name() {
System.out.println("名字:"+name);
}
@Override
public void pice() {
System.out.println("价格:"+pice);
}
}
皮革制品2——貂皮大衣
package factory.simpleFactory;
public class Coat implements Skin {
public String name;
public String pice;
public Coat(String name ,String pice) {
this.name=name;
this.pice=pice;
}
@Override
public void name() {
System.out.println("名字:"+name);
}
@Override
public void pice() {
System.out.println("价格:"+pice);
}
}
消费者
package factory.simpleFactory;
public class Consumer {
public static void main(String[] args) {
Skin wallet = 江南皮革厂.getSkin("真皮钱包");
wallet.name();
wallet.pice();
Skin coat = 江南皮革厂.getSkin("貂皮大衣");
coat.name();
coat.pice();
}
}
如果你不理解Skin 接口为什么可以赋值为Wallet类和Coat类对象,你需要了解一下Java的向上转型知识:https://blog.csdn.net/qq_42909053/article/details/106325632
项目目录结构如下
提出问题:简单工厂模式,把简简单单的一个new,写的这么复杂,到底有什么好?
自己的理解:
1. 如果项目非常非常大。需要多个团队协作开发。
感觉文字叙述,有点说不清,看图吧
这个A团队的锅,让A团队自己背。A团队开发一个中转类。工厂类。
你不需要知道我们开发的有什么类,也不需要知道我们的命名有多么奇葩,你只需要调用接口,输入你想要的东西,工厂就能返回给你。
总结一下就是,调用者不需要知道类到底是怎么实现,怎么命名,和业务逻辑,只管调用就行。
好吧,这个例子是我想破脑袋才想出来的,网上解释很多,但是我现在的水品还不怎么理解。希望有能力的大哥大姐指正,教育。
网上的答案:
1. 实例化对象不用new,用工厂方法代替
我的疑问:本质不还是new?为什么要多加个工厂?
2. 将选择类,创建对象统一管理和控制。从而将调用者和实现类解耦。
我的疑问:这样解耦后有什么好处?
3. 隐藏具体类名,很多类隐藏得很深的,而且可能会在后续版本换掉
我的疑问:隐藏类名干什么?自己后期维护不麻烦吗?
4. 避免你辛苦的准备构造方法的参数
我的疑问:既然能用工厂模式去赋值参数,说明这些参数是默认值,那为什么不直接在实体类里边去声明加赋值??
我很水,简单工厂模式会写,不会灵活运用,不理解的太多,就不一一摆出来了。继续总结我的简单工厂模式吧。
总结一下简单工厂模式的缺点:
不满足开闭原则:一个软件的实体应对扩展开放,对修改关闭。
实际情况:实际开发过程中,工厂模式中,简答工厂应用的最多,因为开发简单。虽然不满足开不原则。
代码
代码稍后我会放在码云上,有兴趣的话,可以浏览或下载。