抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
接工厂模式中女娲补天的故事:
女娲发现这样造出来的人,他们太相似了,彼此之间看起来没什么不一样。于是女娲想让他们之间有更多的不同。比如引入性别,让男性女性之间有更多的差异。
首先我们需要把炉子要造的三种肤色的人这些类改变一下,我们就不去创建新的类了,毕竟性别只是人的一种特征,可以将其作为属性放入类中。
public interface Human {
//首先定义什么是人类
//人是愉快的,会笑的,本来是想用smile表示,想了一下laugh更合适,好长时间 没有大笑了;
public void laugh();
//人类还会哭,代表痛苦
public void cry();
//人类会说话
public void talk();
//提供给炉子去使用的方法,设置性别。 如果自己用那就是变性手术了!
public void setSex(int sex);
//告诉大家自己是什么性别的
public void whichSex();
}
public class BlackHuman implements Human{
private int sex;
@Override
public void laugh() {
System.out.println("黑人会笑");
}
@Override
public void cry() {
System.out.println("黑人会哭");
}
@Override
public void talk() {
System.out.println("黑人可以说话,一般人听不懂");
}
@Override
public void setSex(int sex) {
this.sex = sex;
}
@Override
public void whichSex() {
if(sex == 0)
System.out.println("女的");
else
System.out.println("男的");
}
}
public class WhiteHuman implements Human {
private int sex;
@Override
public void laugh() {
System.out.println("白色人种会大笑,侵略的笑声");
}
@Override
public void cry() {
System.out.println("白色人种会哭");
}
@Override
public void talk() {
System.out.println("白色人种会说话,一般都是但是单字节!");
}
@Override
public void setSex(int sex) {
this.sex = sex;
}
@Override
public void whichSex() {
if(sex == 0)
System.out.println("女的");
else
System.out.println("男的");
}
}
public class YellowHuman implements Human {
private int sex;
@Override
public void laugh() {
System.out.println("黄色人种会大笑,幸福呀!");
}
@Override
public void cry() {
System.out.println("黄色人种会哭");
}
@Override
public void talk() {
System.out.println("黄色人种会说话,一般说的都是双字节");
}
//提供给炉子使用的接口
@Override
public void setSex(int sex) {
this.sex = sex;
}
@Override
public void whichSex() {
if(sex == 0)
System.out.println("女的");
else
System.out.println("男的");
}
}
接下来是炉子的模子:
public interface HumanFactory {
//定义一个烤箱,泥巴塞进去,人就出来,这个先进了
public Human createMan();
public Human createWoman();
}
一葫芦画瓢:三个炉子:
public class WhiteHumanFactory implements HumanFactory{
@Override
public Human createMan() {
Human man = new WhiteHuman();
man.setSex(1);
return man;
}
@Override
public Human createWoman() {
Human woman = new WhiteHuman();
woman.setSex(0);
return woman;
}
}
public class YellowHumanFactory implements HumanFactory {
@Override
public Human createMan() {
Human man = new YellowHuman();
man.setSex(1);
return man;
}
@Override
public Human createWoman() {
Human woman = new YellowHuman();
woman.setSex(0);
return woman;
}
}
public class BlackHumanFactory implements HumanFactory {
@Override
public Human createMan() {
Human man = new BlackHuman();
man.setSex(1);
return man;
}
@Override
public Human createWoman() {
Human woman = new BlackHuman();
woman.setSex(0);
return woman;
}
}
最后,女娲造人:
public class NvWa {
public static void main(String[] args) {
HumanFactory factory1 = new WhiteHumanFactory();
HumanFactory factory2 = new BlackHumanFactory();
HumanFactory factory3 = new YellowHumanFactory();
System.out.println("------------造出的第一批人是这样的:白人-----------------");
Human whiteHuman = factory1.createMan();
whiteHuman.cry();
whiteHuman.laugh();
whiteHuman.talk();
whiteHuman.whichSex();
whiteHuman = factory1.createWoman();
whiteHuman.cry();
whiteHuman.laugh();
whiteHuman.talk();
whiteHuman.whichSex();
System.out.println("\n\n------------造出的第二批人是这样的:黑人-----------------");
Human blackHuman = factory2.createMan();
blackHuman.cry();
blackHuman.laugh();
blackHuman.talk();
blackHuman.whichSex();
blackHuman = factory2.createWoman();
blackHuman.cry();
blackHuman.laugh();
blackHuman.talk();
blackHuman.whichSex();
System.out.println("\n\n------------造出的第三批人是这样的:黄色人种-----------------");
Human yellowHuman = factory3.createMan();
yellowHuman.cry();
yellowHuman.laugh();
yellowHuman.talk();
yellowHuman.whichSex();
yellowHuman = factory3.createWoman();
yellowHuman.cry();
yellowHuman.laugh();
yellowHuman.talk();
yellowHuman.whichSex();
}
}
网友评论