以下是使用Java实现女娲造人的三种工厂模式:
1. 简单工厂模式
首先定义一个简单工厂类,根据传入的参数不同,创建不同的人种对象。
public class SimpleFactory {
public static Human createHuman(String type) {
if ("Black".equals(type)) {
return new BlackHuman();
} else if ("White".equals(type)) {
return new WhiteHuman();
} else if ("Yellow".equals(type)) {
return new YellowHuman();
} else {
return null;
}
}
}
然后定义一个Human接口,以及三个不同的人种类实现该接口。
public interface Human {
void getColor();
void talk();
}
public class BlackHuman implements Human {
public void getColor() {
System.out.println("黑色人种的皮肤颜色是黑色的。");
}
public void talk() {
System.out.println("黑人会说话,一般人听不懂。");
}
}
public class WhiteHuman implements Human {
public void getColor() {
System.out.println("白色人种的皮肤颜色是白色的。");
}
public void talk() {
System.out.println("白人会说话,一般人听得懂。");
}
}
public class YellowHuman implements Human {
public void getColor() {
System.out.println("黄色人种的皮肤颜色是黄色的。");
}
public void talk() {
System.out.println("黄种人会说话,一般人听得懂。");
}
}
最后在Main函数中调用简单工厂类创建不同的人种对象。
public class Main {
public static void main(String[] args) {
Human blackHuman = SimpleFactory.createHuman("Black");
blackHuman.getColor();
blackHuman.talk();
Human whiteHuman = SimpleFactory.createHuman("White");
whiteHuman.getColor();
whiteHuman.talk();
Human yellowHuman = SimpleFactory.createHuman("Yellow");
yellowHuman.getColor();
yellowHuman.talk();
}
}
2. 工厂方法模式
首先定义一个抽象工厂类,具体的工厂类继承该抽象工厂类,实现创建不同人种对象的方法。
public abstract class AbstractFactory {
abstract Human createHuman();
}
public class BlackHumanFactory extends AbstractFactory {
public Human createHuman() {
return new BlackHuman();
}
}
public class WhiteHumanFactory extends AbstractFactory {
public Human createHuman() {
return new WhiteHuman();
}
}
public class YellowHumanFactory extends AbstractFactory {
public Human createHuman() {
return new YellowHuman();
}
}
然后定义一个Human接口,以及三个不同的人种类实现该接口。
public interface Human {
void getColor();
void talk();
}
public class BlackHuman implements Human {
public void getColor() {
System.out.println("黑色人种的皮肤颜色是黑色的。");
}
public void talk() {
System.out.println("黑人会说话,一般人听不懂。");
}
}
public class WhiteHuman implements Human {
public void getColor() {
System.out.println("白色人种的皮肤颜色是白色的。");
}
public void talk() {
System.out.println("白人会说话,一般人听得懂。");
}
}
public class YellowHuman implements Human {
public void getColor() {
System.out.println("黄色人种的皮肤颜色是黄色的。");
}
public void talk() {
System.out.println("黄种人会说话,一般人听得懂。");
}
}
最后在Main函数中调用具体的工厂类创建不同的人种对象。
public class Main {
public static void main(String[] args) {
AbstractFactory blackHumanFactory = new BlackHumanFactory();
Human blackHuman = blackHumanFactory.createHuman();
blackHuman.getColor();
blackHuman.talk();
AbstractFactory whiteHumanFactory = new WhiteHumanFactory();
Human whiteHuman = whiteHumanFactory.createHuman();
whiteHuman.getColor();
whiteHuman.talk();
AbstractFactory yellowHumanFactory = new YellowHumanFactory();
Human yellowHuman = yellowHumanFactory.createHuman();
yellowHuman.getColor();
yellowHuman.talk();
}
}
3. 抽象工厂模式
首先定义一个抽象工厂类,具体的工厂类继承该抽象工厂类,实现创建不同人种对象的方法。
public abstract class AbstractFactory {
abstract Human createYellowHuman();
abstract Human createWhiteHuman();
abstract Human createBlackHuman();
}
public class FemaleFactory extends AbstractFactory {
public Human createYellowHuman() {
return new FemaleYellowHuman();
}
public Human createWhiteHuman() {
return new FemaleWhiteHuman();
}
public Human createBlackHuman() {
return new FemaleBlackHuman();
}
}
public class MaleFactory extends AbstractFactory {
public Human createYellowHuman() {
return new MaleYellowHuman();
}
public Human createWhiteHuman() {
return new MaleWhiteHuman();
}
public Human createBlackHuman() {
return new MaleBlackHuman();
}
}
然后定义一个Human接口,以及六个不同的人种类实现该接口。
public interface Human {
void getColor();
void talk();
}
public class FemaleYellowHuman implements Human {
public void getColor() {
System.out.println("黄种女性的皮肤颜色是黄色的。");
}
public void talk() {
System.out.println("黄种女性会说话,一般人听得懂。");
}
}
public class MaleYellowHuman implements Human {
public void getColor() {
System.out.println("黄种男性的皮肤颜色是黄色的。");
}
public void talk() {
System.out.println("黄种男性会说话,一般人听得懂。");
}
}
public class FemaleWhiteHuman implements Human {
public void getColor() {
System.out.println("白种女性的皮肤颜色是白色的。");
}
public void talk() {
System.out.println("白种女性会说话,一般人听得懂。");
}
}
public class MaleWhiteHuman implements Human {
public void getColor() {
System.out.println("白种男性的皮肤颜色是白色的。");
}
public void talk() {
System.out.println("白种男性会说话,一般人听得懂。");
}
}
public class FemaleBlackHuman implements Human {
public void getColor() {
System.out.println("黑种女性的皮肤颜色是黑色的。");
}
public void talk() {
System.out.println("黑种女性会说话,一般人听不懂。");
}
}
public class MaleBlackHuman implements Human {
public void getColor() {
System.out.println("黑种男性的皮肤颜色是黑色的。");
}
public void talk() {
System.out.println("黑种男性会说话,一般人听不懂。");
}
}
最后在Main函数中调用具体的工厂类创建不同的人种对象。
public class Main {
public static void main(String[] args) {
AbstractFactory maleFactory = new MaleFactory();
Human maleYellowHuman = maleFactory.createYellowHuman();
maleYellowHuman.getColor();
maleYellowHuman.talk();
AbstractFactory femaleFactory = new FemaleFactory();
Human femaleWhiteHuman = femaleFactory.createWhiteHuman();
femaleWhiteHuman.getColor();
femaleWhiteHuman.talk();
AbstractFactory maleFactory2 = new MaleFactory();
Human maleBlackHuman = maleFactory2.createBlackHuman();
maleBlackHuman.getColor();
maleBlackHuman.talk();
}
}