一、分类
1、简单工厂
2、工厂方法
3、抽象工厂
二、使用案例
1、简单工厂
角色:抽象产品、具体产品、具体工厂、使用创造者
代码案例之女娲造人
抽象产品
public interface Human {
//首先定义什么是人类
//人是愉快的,会笑的,本来是想用smile表示,想了一下laugh更合适,好长时间没有大笑了;
public void laugh();
//人类还会哭,代表痛苦
public void cry();
//人类会说话
public void talk();
}
具体产品
public class BlackHuman implements Human {
public void cry() {
System.out.println("黑人会哭");
}
public void laugh() {
System.out.println("黑人会笑");
}
public void talk() {
System.out.println("黑人可以说话,一般人听不懂");
}
}
public class WhiteHuman implements Human {
public void cry() {
System.out.println("白色人类会哭");
}
public void laugh() {
System.out.println("白色人类会大笑,侵略的笑声");
}
public void talk() {
System.out.println("白色人类会说话,一般都是但是单字节!");
}
}
具体工厂
public class {
//定一个烤箱,泥巴塞进去,人就出来,这个太先进了
public static Human createHuman(String type){
if (type.equals("black")) {//生产黑人
return new BlackHuman ();
} else if (type.equals("white")) {//生产白人
return new WhiteHuman();
}
return null;
}
使用创造者
public class NvWa {
public static void main(String[] args) {
HumanFactory mFactory = new HumanFactory ();
BlackHuman blackHuman = (BlackHuman ) mFactory.createHuman("black");//黑人
WhiteHuman whiteHuman = (WhiteHuman ) mFactory.createHuman("white");//白人
}
}
2、工厂方法
角色:抽象产品类、具体产品类、抽象工厂类、具体工厂类
在简单工厂的基础上将工厂类抽象出来
工厂接口
public interface HumanFactory {
Human createHuman();//生产人
}
具体工厂
白人工厂
public class WhiteFactory implements HumanFactory {
@Override
public Human createHuman() {
return new WhiteHuman();
}
}
黑人工厂
public class BlackFactory implements HumanFactory {
@Override
public Human createHuman() {
return new BlackHuman();
}
}
使用创造者
public class NvWa {
public static void main(String[] args) {
WhiteFactory wFactory = new WhiteFactory ();
WhiteHuman whiteHuman= (WhiteHuman) wFactory.createHuman();//白人
BlackFactory bFactory = new BlackFactory ();
BlackHuman blackHuman= (BlackHuman) bFactory.createHuman();//黑人
}
}
3、抽象工厂
角色:抽象产品类、具体产品类、抽象工厂类、具体工厂类
工厂方法的基础上新增人类的性别
public interface Human {
//首先定义什么是人类
//人是愉快的,会笑的,本来是想用smile表示,想了一下laugh更合适,好长时间没有大笑了;
public void laugh();
//人类还会哭,代表痛苦
public void cry();
//人类会说话
public void talk();
//定义性别
public void sex();
}
具体产品
使用抽象类:因为要创建性别
public abstract class AbstractWhiteHuman implements Human {
public void cry() {
System.out.println("白色人类会哭");
}
public void laugh() {
System.out.println("白色人类会大笑,侵略的笑声");
}
public void talk() {
System.out.println("白色人类会说话,一般都是但是单字节!");
}
}
public abstract class AbstractBlackHuman implements Human {
public void cry() {
System.out.println("黑人会哭");
}
public void laugh() {
System.out.println("黑人会笑");
}
public void talk() {
System.out.println("黑人可以说话,一般人听不懂");
}
}
然后创建性别类
public class WhiteFemaleHuman extends AbstractWhiteHuman {
public void sex() {
System.out.println("该白种人的性别为女....");
}
}
public class WhiteMaleHuman extends AbstractWhiteHuman {
public void sex() {
System.out.println("该白种人的性别为男....");
}
}
public class BlackFemaleHuman extends AbstractBlackHuman {
public void sex() {
System.out.println("该黑种人的性别为女...");
}
}
public class BlackMaleHuman extends AbstractBlackHuman {
public void sex() {
System.out.println("该黑种人的性别为男...");
}
}
工厂类
public interface HumanFactory {
//制造一个白色人类
public Human createWhiteHuman();
//制造一个黑色人类
public Human createBlackHuman();
}
抽象工厂
public abstract class AbstractHumanFactory implements HumanFactory {
/*
* 给定一个性别人类,创建一个人类出来 专业术语是产生产品等级
*/
protected Human createHuman(String type) {
if (type.equals("blackMale")) {//生产男黑人
return new BlackHuman ();
} else if (type.equals("blackFemale")) {//生产女黑人
return new BlackFemaleHuman ();
}else if (type.equals("whiteMale")) {//生产男白人
return new WhiteMaleHuman ();
}else if (type.equals("whiteFemale")) {//生产女白人
return new WhiteFemaleHuman ();
}
return null;
}
男性工厂
public class MaleHumanFactory extends AbstractHumanFactory {
//创建一个男性黑种人
public Human createBlackHuman() {
return super.createHuman(“blackMale”);
}
//创建一个男性白种人
public Human createWhiteHuman() {
return super.createHuman("whiteMale");
}
}
女性工厂
public class FemaleHumanFactory extends AbstractHumanFactory {
//创建一个女性黑种人
public Human createBlackHuman() {
return super.createHuman(“blackFemale”);
}
//创建一个女性白种人
public Human createWhiteHuman() {
return super.createHuman("whiteFemale");
}
}
创造使用者
public class NvWa {
public static void main(String[] args) {
//第一条生产线,男性生产线
HumanFactory maleHumanFactory = new MaleHumanFactory();
//第二条生产线,女性生产线
HumanFactory femaleHumanFactory = new FemaleHumanFactory();
//生产线建立完毕,开始生产人了:
Human maleBlackHuman = maleHumanFactory.createBlackHuman();
Human femaleBlackHuman = femaleHumanFactory.createBlackHuman();
maleBlackHuman .cry();
maleBlackHuman .laugh();
maleBlackHuman .sex();
/*
* .....
* 后面你可以续了
*/
}
}