简述java工厂模式详解_java工厂模式(例子详解)

HairFactory类

packagecom.kero99.ygc.project;

publicclassHairFactory{

/**

*设计模式(DesignPattern)

*是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。

*工厂模式概念:

*实例化对象,用工厂方法代替new操作。

*工厂模式包括工厂方法模式和抽象工厂模式。

*抽象工厂模式是工厂方法模式的扩展。

*工厂模式的意图:

*定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化。

*工厂方法把实例化的工作推迟到子类中去实现。

*工厂模式使用场景:java8.jpg

*有一组类似的对象需要创建。

*在编码时不能预见需要创建那种类的实例。

*系统需要考虑扩展性,不应依赖于产品类实例如何被创建、组合和表达的细节。

*eg:场景脸萌↓

*@paramkey

*@return

*/

publicHairInterfacegetHair(Stringkey){

if("left".equals(key)){

returnnewLeftHair();

}else

if("right".equals(key)){

returnnewRightHair();

}

returnnull;

}

//反射实现

publicHairInterfacegetHairByClass(StringclassName){

HairInterfacehair;

try{

hair=(HairInterface)Class.forName(className).newInstance();

returnhair;

}catch(InstantiationExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(IllegalAccessExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(ClassNotFoundExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

returnnull;

}

}

HairInterface接口

packagecom.kero99.ygc.project;

publicinterfaceHairInterface{

//画发型

publicvoiddraw();

}

LeftHair类的实现

packagecom.kero99.ygc.project;

publicclassLeftHairimplementsHairInterface{

//画了一个左偏分发型

@Override

publicvoiddraw(){

//TODOAuto-generatedmethodstub

System.out.println("左偏分发型...");

}

}

RightHair类的实现

packagecom.kero99.ygc.project;

publicclassRightHairimplementsHairInterface{

//画了一个右偏分发型

@Override

publicvoiddraw(){

//TODOAuto-generatedmethodstub

System.out.println("右偏分发型...");

}

}

Test类

packagecom.kero99.ygc.project;

publicclassYGCTest{

publicstaticvoidmain(String[]args){

//HairInterfaceleft=newLeftHair();

//left.draw();

//HairInterfaceright=newRightHair();

//right.draw();

//HairFactoryfactory=newHairFactory();

//HairInterfaceleft=factory.getHair("left");

//left.draw();

//HairInterfaceright=factory.getHair("right");

//right.draw();

//通过具体类名称获取实例可以用properties工具创建Class地址

HairFactoryfactory=newHairFactory();

HairInterfaceleft=factory.getHairByClass("com.kero99.project.LeftHair");

left.draw();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值