洪爵今天想给大家讲讲工厂模式呀!工厂模式,世界的梦工厂!
工厂模式是一种创建型的模式,很多人可能就问,啥是创建型模式呀?创建型模式就是处理对象创建方式的模式。
很多人劈里啪啦上来讲一大堆东西,然后最后才是上代码。洪爵却不这么想,洪爵觉得应该先给大家看代码,在看的过程,大家会去思考,这是个什么东西,为什么要这么写,然后才会有一个动脑子和顿悟的过程,所以先上代码:
// Hair.java
// 定义一个接口Hair, 然后里面有一个方法, 有关于Hair的color
public interface Hair {
void color();
}
// BlackHair.java
// BlackHair实现Hair接口, 实现它的方法
public class BlackHair implements Hair {
public void color() {
System.out.println("黑颜色");
}
}
// WhiteHair.java
// WhiteHair实现Hair接口, 实现它的方法
public class WhiteHair implements Hair {
public void color() {
System.out.println("白颜色");
}
}
// YellowHair.java
// YellowHair实现Hair接口, 实现它的方法
public class YellowHair implements Hair {
public void color() {
System.out.println("黄颜色");
}
}
// HairFactory.java
public class HairFactory {
// 通过hairColor去生成对应的对象
public Hair getHair(String hairColor) {
if(null == hairColor) {
return null;
}
if("YELLOW".equalsIgnoreCase(hairColor)) {
return new YellowHair();
} else if("BLACK".equalsIgnoreCase(hairColor)) {
return new BlackHair();
} else if("WHITE".equalsIgnoreCase(hairColor)) {
return new WhiteHair();
}
return null;
}
}
// Client.java
public class Client {
public static void main(String[] args) {
// 初始化工厂
HairFactory hairFactory = new HairFactory();
// 让这个工厂去按照要求生产
Hair hair1 = hairFactory.getHair("YELLOW");
hair1.color();
Hair hair2 = hairFactory.getHair("WHITE");
hair2.color();
Hair hair3 = hairFactory.getHair("BLACK");
hair3.color();
}
}
黄颜色
白颜色
黑颜色
类图
通过上述代码,大家可以发现,我们通过Hair工厂代替我们去new有关于Hair的对象,在不涉及到整个Hair的具体实现类,达到了封装的效果。也就是说Hair工厂提供一个方法供外部使用,这样当涉及到好几个Hair的实现类变动时,我们都能收束到一个方法去进行修改和管理,避免到处去去修改之前new Hair的代码。
这样给系统带来了可拓展性和维护性,同时屏蔽了底层细节。
但是工厂模式也不是没有缺点的,当你要去增加一个新产品的时候,比如说水壶(接口),那么水壶衍生出来就有各种各样的水壶(具体实现),然后又要定义一个专门制作水壶的工厂,在一定程度上增加了系统的复杂度。
好啦,本篇工厂模式就到这里啦,希望大家一定要自己去敲一遍代码,感觉一下工厂模式的便利哦!
愿每个人都能带着怀疑的态度去阅读文章并探究其中原理。
道阻且长,往事作序,来日为章。
期待我们下一次相遇!