文章是看了网上《设计模式之禅》第二版的,和网上其他文章写出来的。
简单工厂模式的类图:
抽象产品类
可以是抽象类 可以是接口,主要看需求是用接口 还是用抽象类。
因为我们重点制造出不同肤色的人,所以我们需要一个接口或者抽象类来被他们实现或者继承。
Human(抽象产品类) 可以是接口或者抽象类
//Human.java
public interface Human {
void getColor();
void talk();
}
具体产品类
具体产品类这里是黑人,黄种人,白种人。代码实现如下:
//BlackHuman.java
public class BlackHuman implements Human {
@Override
public void getColor() {
System.out.println("黑种人黑色皮肤");
}
@Override
public void talk() {
System.out.println("说的是单字节语言");
}
}
//YellowHuman.java
public class YellowHuman implements Human {
@Override
public void getColor() {
System.out.println("黄种人黄色皮肤");
}
@Override
public void talk() {
System.out.println("黄种人说的是双字节语言");
}
}
//WhiteHuman.java
public class WhiteHuman implements Human {
@Override
public void getColor() {
System.out.println("白人是白色皮肤");
}
@Override
public void talk() {
System.out.println("白人说的是单字节语言");
}
}
工厂类
负责生成产品对象的。在这里,工厂类是HumanFactory,这里用到了静态方法生产产品,确切来说,这是一个 简单静态工厂模式。
简单工厂模式是通过 switch case (或者if elseif)来写分支的。这就是工厂模式的最大区别之处。
//HumanFactory.java
public class HumanFactory {
public static Human createHuman(int type){
Human human = null;
switch (type) {
case 1:
human = new WhiteHuman();
break;
case 2:
human = new BlackHuman();
break;
case 3:
human = new YellowHuman();
break;
}
return human;
}
}
客户
这里客户是女娲.
public class Nvwa {
public static void main(String[] args) {
System.out.println("--早出的第一批人是白色人种--");
Human whiteHuman = HumanFactory.createHuman(1);
whiteHuman.getColor();
whiteHuman.talk();
System.out.println("--第二次 是黑色人种--");
Human blackHuman = HumanFactory.createHuman(2);
blackHuman.getColor();
blackHuman.talk();
System.out.println("--最后 是黄色人种--");
Human yellowHuman = HumanFactory.createHuman(3);
yellowHuman.getColor();
yellowHuman.talk();
}
}