HairFactory类
packagecom.kero99.ygc.project;
publicclassHairFactory{
/**
*设计模式(DesignPattern)
*是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
*工厂模式概念:
*实例化对象,用工厂方法代替new操作。
*工厂模式包括工厂方法模式和抽象工厂模式。
*抽象工厂模式是工厂方法模式的扩展。
*工厂模式的意图:
*定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化。
*工厂方法把实例化的工作推迟到子类中去实现。
*工厂模式使用场景:
*有一组类似的对象需要创建。
*在编码时不能预见需要创建那种类的实例。
*系统需要考虑扩展性,不应依赖于产品类实例如何被创建、组合和表达的细节。
*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();
}
}