java设计模式-工厂模式
2017-09-27 09:40
375 查看
一 工厂模式
1 //首先定义一个人的接口 定义人都能干什么
public interface Ren {
//人会大笑
public void laugh();
//人会哭
public void cry();
//人会说话
public void talk();
}
2 定义一个黑人 实现人的接口
public class HeiRen implements Ren {
@Override
public void laugh() {
// TODO Auto-generated method stub
System.out.println("黑人 正在大笑");
}
@Override
public void cry() {
// TODO Auto-generated method stub
System.out.println("黑人 正在伤心的哭");
}
@Override
public void talk() {
// TODO Auto-generated method stub
System.out.println("黑人 正在说话");
}
}
3 定义一个白人实现人的接口
public class BaiRen implements Ren {
@Override
public void laugh() {
// TODO Auto-generated method stub
System.out.println("白种人 正在大笑");
}
@Override
public void cry() {
// TODO Auto-generated method stub
System.out.println("白种人 正在伤心的哭");
}
@Override
public void talk() {
// TODO Auto-generated method stub
System.out.println("白种人 正在说话");
}
}
4定义一个工厂 确认工厂的能做什么
public class LuZi {
//定义一个克隆机器
public static Ren getFactory(Class c) {
Ren ren = null;//定义一个人
try {
ren = (Ren) Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
//你要是不说个人种颜色的话,没法烤,要白的,你说话了才好烤
System.out.println("必须指定人种的颜色");
e.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO: handle exception
//定义的人种有问题,那就烤不出来了,这是...
System.out.println("指定人种的有问题");
e1.printStackTrace();
} catch (ClassNotFoundException e2) {
// TODO: handle exception
System.out.println("指定人种的有问题");
e2.printStackTrace();
}
return ren;
}
}
5 开始使用工厂
public class NvWa {
public static void main(String[] args) {
Ren ren = LuZi.getFactory(BaiRen.class);
ren.cry();
}
}
二 抽象工厂模式 -该模式
1首先定义一个人的接口
public interface Ren {
//首先定义什么是人类
//人是愉快的,会笑的,本来是想用smile表示,想了一下laugh更合适,好长时间没有大笑了;
public void laugh();
//人类还会哭,代表痛苦
public void cry();
//人类会说话
public void talk();
//定义性别
public void sex();
}
2然后定义人种抽象类型
// 然后根据接口创建三个抽象类 也就是三个产品等级 定义一个人种
public abstract class AbstractBaiRen implements Ren {
@Override
public void laugh() {
// TODO Auto-generated method stub
System.out.println("白人会笑");
}
@Override
public void cry() {
// TODO Auto-generated method stub
System.out.println("白人会哭");
}
@Override
public void talk() {
// TODO Auto-generated method stub
System.out.println("白人会说话");
}
}
// 然后根据接口创建三个抽象类 也就是三个产品等级 定义一个人种
public abstract class AbstractHeiRen implements Ren {
@Override
public void laugh() {
// TODO Auto-generated method stub
System.out.println("白人会笑");
}
@Override
public void cry() {
// TODO Auto-generated method stub
System.out.println("白人会哭");
}
@Override
public void talk() {
// TODO Auto-generated method stub
System.out.println("白人会说话");
}
}
3定义具体的人
public class BaiNanRen extends AbstractBaiRen {
@Override
public void sex() {
// TODO Auto-generated method stub
System.out.println("白种人 男");
}
}
public class BaiNvRen extends AbstractBaiRen {
@Override
public void sex() {
// TODO Auto-generated method stub
System.out.println("白种人 女");
}
}
public class HeiNanRen extends AbstractHeiRen {
@Override
public void sex() {
// TODO Auto-generated method stub
System.out.println("黑种人 男");
}
}
public class HeiNvRen extends AbstractHeiRen {
@Override
public void sex() {
// TODO Auto-generated method stub
System.out.println("黑种人 女");
}
}
4定义一个克隆机
public interface LuZiFactory {
//制造黄色人种
public Ren createYellowHuman();
//制造一个白色人种
public Ren createWhiteHuman();
//制造一个黑色人种
public Ren createBlackHuman();
}
克隆机抽象类
public abstract class AbstrsctLuZiFactory implements LuZiFactory {
/*
* 给定一个性别人种,创建一个人类出来 专业术语是产生产品等级
*/
protected Ren createHuman(HumanEnum humanEnum) {
Ren human = null;
//如果传递进来不是一个Enum中具体的一个Element的话,则不处理
if (!humanEnum.getValue().equals("")) {
try {
//直接产生一个实例
human = (Ren) Class.forName(humanEnum.getValue()).newInstance();
} catch (Exception e) {
//因为使用了enum,这个种异常情况不会产生了,除非你的enum有问题;
e.printStackTrace();
}
}
return human;
}
}
5定义一个具体克隆机 克隆男性
public class NanLuZiFactory extends AbstrsctLuZiFactory {
//创建一个男性黑种人
public Ren createBlackHuman() {
return super.createHuman(HumanEnum.BlackMaleHuman);
}
//创建一个男性白种人
public Ren createWhiteHuman() {
return super.createHuman(HumanEnum.WhiteMaleHuman);
}
//创建一个男性黄种人
public Ren createYellowHuman() {
return super.createHuman(HumanEnum.YelloMaleHuman);
}
}
克隆女性
public class NvLuZiFactory extends AbstrsctLuZiFactory {
//创建一个女性黑种人
public Ren createBlackHuman() {
return super.createHuman(HumanEnum.BlackFemaleHuman);
}
//创建一个女性白种人
public Ren createWhiteHuman() {
return super.createHuman(HumanEnum.WhiteFemaleHuman);
}
//创建一个女性黄种人
public Ren createYellowHuman() {
return super.createHuman(HumanEnum.YelloFemaleHuman);
}
}
开始克隆
public class NvWaTestMain {
public static void main(String[] args) {
//第一条生产线,男性生产线
LuZiFactory maleHumanFactory = new NanLuZiFactory();
//第二条生产线,女性生产线
LuZiFactory femaleHumanFactory = new NvLuZiFactory();
//生产线建立完毕,开始生产人了:
Ren maleYellowHuman = maleHumanFactory.createYellowHuman();
Ren femaleYellowHuman = femaleHumanFactory.createYellowHuman();
maleYellowHuman.cry();
maleYellowHuman.laugh();
femaleYellowHuman.sex();
/*
* ..... 后面你可以续了
*/
}
}
定义人种枚举
public enum HumanEnum {
//把世界上所有人类型都定义出来
YelloMaleHuman("com.cbf4life.yellowHuman.YellowMaleHuman"), YelloFemaleHuman(
"com.cbf4life.yellowHuman.YellowFemaleHuman"), WhiteFemaleHuman(
"com.cbf4life.whiteHuman.WhiteFemaleHuman"), WhiteMaleHuman(
"com.cbf4life.whiteHuman.WhiteMaleHuman"), BlackFemaleHuman(
"com.cbf4life.blackHuman.BlackFemaleHuman"), BlackMaleHuman(
"com.cbf4life.blackHuman.BlackMaleHuman");
private String value = "";
//定义构造函数,目的是Data(value)类型的相匹配
private HumanEnum(String value) {
this.value = value;
}
public String getValue() {
return this.value;
}
/*
* java enum类型尽量简单使用,尽量不要使用多态、继承等方法 毕竟用Clas完全可以代替enum
*/
}
1 //首先定义一个人的接口 定义人都能干什么
public interface Ren {
//人会大笑
public void laugh();
//人会哭
public void cry();
//人会说话
public void talk();
}
2 定义一个黑人 实现人的接口
public class HeiRen implements Ren {
@Override
public void laugh() {
// TODO Auto-generated method stub
System.out.println("黑人 正在大笑");
}
@Override
public void cry() {
// TODO Auto-generated method stub
System.out.println("黑人 正在伤心的哭");
}
@Override
public void talk() {
// TODO Auto-generated method stub
System.out.println("黑人 正在说话");
}
}
3 定义一个白人实现人的接口
public class BaiRen implements Ren {
@Override
public void laugh() {
// TODO Auto-generated method stub
System.out.println("白种人 正在大笑");
}
@Override
public void cry() {
// TODO Auto-generated method stub
System.out.println("白种人 正在伤心的哭");
}
@Override
public void talk() {
// TODO Auto-generated method stub
System.out.println("白种人 正在说话");
}
}
4定义一个工厂 确认工厂的能做什么
public class LuZi {
//定义一个克隆机器
public static Ren getFactory(Class c) {
Ren ren = null;//定义一个人
try {
ren = (Ren) Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
//你要是不说个人种颜色的话,没法烤,要白的,你说话了才好烤
System.out.println("必须指定人种的颜色");
e.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO: handle exception
//定义的人种有问题,那就烤不出来了,这是...
System.out.println("指定人种的有问题");
e1.printStackTrace();
} catch (ClassNotFoundException e2) {
// TODO: handle exception
System.out.println("指定人种的有问题");
e2.printStackTrace();
}
return ren;
}
}
5 开始使用工厂
public class NvWa {
public static void main(String[] args) {
Ren ren = LuZi.getFactory(BaiRen.class);
ren.cry();
}
}
二 抽象工厂模式 -该模式
1首先定义一个人的接口
public interface Ren {
//首先定义什么是人类
//人是愉快的,会笑的,本来是想用smile表示,想了一下laugh更合适,好长时间没有大笑了;
public void laugh();
//人类还会哭,代表痛苦
public void cry();
//人类会说话
public void talk();
//定义性别
public void sex();
}
2然后定义人种抽象类型
// 然后根据接口创建三个抽象类 也就是三个产品等级 定义一个人种
public abstract class AbstractBaiRen implements Ren {
@Override
public void laugh() {
// TODO Auto-generated method stub
System.out.println("白人会笑");
}
@Override
public void cry() {
// TODO Auto-generated method stub
System.out.println("白人会哭");
}
@Override
public void talk() {
// TODO Auto-generated method stub
System.out.println("白人会说话");
}
}
// 然后根据接口创建三个抽象类 也就是三个产品等级 定义一个人种
public abstract class AbstractHeiRen implements Ren {
@Override
public void laugh() {
// TODO Auto-generated method stub
System.out.println("白人会笑");
}
@Override
public void cry() {
// TODO Auto-generated method stub
System.out.println("白人会哭");
}
@Override
public void talk() {
// TODO Auto-generated method stub
System.out.println("白人会说话");
}
}
3定义具体的人
public class BaiNanRen extends AbstractBaiRen {
@Override
public void sex() {
// TODO Auto-generated method stub
System.out.println("白种人 男");
}
}
public class BaiNvRen extends AbstractBaiRen {
@Override
public void sex() {
// TODO Auto-generated method stub
System.out.println("白种人 女");
}
}
public class HeiNanRen extends AbstractHeiRen {
@Override
public void sex() {
// TODO Auto-generated method stub
System.out.println("黑种人 男");
}
}
public class HeiNvRen extends AbstractHeiRen {
@Override
public void sex() {
// TODO Auto-generated method stub
System.out.println("黑种人 女");
}
}
4定义一个克隆机
public interface LuZiFactory {
//制造黄色人种
public Ren createYellowHuman();
//制造一个白色人种
public Ren createWhiteHuman();
//制造一个黑色人种
public Ren createBlackHuman();
}
克隆机抽象类
public abstract class AbstrsctLuZiFactory implements LuZiFactory {
/*
* 给定一个性别人种,创建一个人类出来 专业术语是产生产品等级
*/
protected Ren createHuman(HumanEnum humanEnum) {
Ren human = null;
//如果传递进来不是一个Enum中具体的一个Element的话,则不处理
if (!humanEnum.getValue().equals("")) {
try {
//直接产生一个实例
human = (Ren) Class.forName(humanEnum.getValue()).newInstance();
} catch (Exception e) {
//因为使用了enum,这个种异常情况不会产生了,除非你的enum有问题;
e.printStackTrace();
}
}
return human;
}
}
5定义一个具体克隆机 克隆男性
public class NanLuZiFactory extends AbstrsctLuZiFactory {
//创建一个男性黑种人
public Ren createBlackHuman() {
return super.createHuman(HumanEnum.BlackMaleHuman);
}
//创建一个男性白种人
public Ren createWhiteHuman() {
return super.createHuman(HumanEnum.WhiteMaleHuman);
}
//创建一个男性黄种人
public Ren createYellowHuman() {
return super.createHuman(HumanEnum.YelloMaleHuman);
}
}
克隆女性
public class NvLuZiFactory extends AbstrsctLuZiFactory {
//创建一个女性黑种人
public Ren createBlackHuman() {
return super.createHuman(HumanEnum.BlackFemaleHuman);
}
//创建一个女性白种人
public Ren createWhiteHuman() {
return super.createHuman(HumanEnum.WhiteFemaleHuman);
}
//创建一个女性黄种人
public Ren createYellowHuman() {
return super.createHuman(HumanEnum.YelloFemaleHuman);
}
}
开始克隆
public class NvWaTestMain {
public static void main(String[] args) {
//第一条生产线,男性生产线
LuZiFactory maleHumanFactory = new NanLuZiFactory();
//第二条生产线,女性生产线
LuZiFactory femaleHumanFactory = new NvLuZiFactory();
//生产线建立完毕,开始生产人了:
Ren maleYellowHuman = maleHumanFactory.createYellowHuman();
Ren femaleYellowHuman = femaleHumanFactory.createYellowHuman();
maleYellowHuman.cry();
maleYellowHuman.laugh();
femaleYellowHuman.sex();
/*
* ..... 后面你可以续了
*/
}
}
定义人种枚举
public enum HumanEnum {
//把世界上所有人类型都定义出来
YelloMaleHuman("com.cbf4life.yellowHuman.YellowMaleHuman"), YelloFemaleHuman(
"com.cbf4life.yellowHuman.YellowFemaleHuman"), WhiteFemaleHuman(
"com.cbf4life.whiteHuman.WhiteFemaleHuman"), WhiteMaleHuman(
"com.cbf4life.whiteHuman.WhiteMaleHuman"), BlackFemaleHuman(
"com.cbf4life.blackHuman.BlackFemaleHuman"), BlackMaleHuman(
"com.cbf4life.blackHuman.BlackMaleHuman");
private String value = "";
//定义构造函数,目的是Data(value)类型的相匹配
private HumanEnum(String value) {
this.value = value;
}
public String getValue() {
return this.value;
}
/*
* java enum类型尽量简单使用,尽量不要使用多态、继承等方法 毕竟用Clas完全可以代替enum
*/
}
相关文章推荐
- JAVA设计模式之---工厂模式
- java设计模式—工厂模式
- java设计模式—工厂模式
- Java 设计模式—工厂模式(三种方式)
- Java 设计模式 之 工厂模式
- 二Java设计模式——工厂模式
- java设计模式之一工厂模式(Factory Method)
- java设计模式之一工厂模式(Factory Method)
- java设计模式———工厂模式(工厂方法模式)
- JAVA设计模式——工厂模式
- Java设计模式之创建型模式-工厂模式(Factory)
- java设计模式 工厂模式
- java设计模式——工厂模式
- JAVA设计模式(工厂模式)
- java设计模式——工厂模式
- java设计模式—工厂模式
- java设计模式之一工厂模式(Factory Method)
- java设计模式之一工厂模式(Factory Method)
- 【设计模式】java工厂模式代码示例
- 设计模式:一个体现Java接口及工厂模式优点的例子