java工厂模式(例子详解)

工厂方法模式(FactoryMethod)

工厂方法模式分为三种:
1、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:

工厂方法模式


举例如下:(我们举一个发送邮件和短信的例子)
首先,创建二者的共同接口:
publicinterfaceSender{
publicvoidSend();
}
其次,创建实现类:
publicclassMailSenderimplementsSender{
@Override
publicvoidSend(){
System.out.println("thisismailsender!");
}
}
publicclassSmsSenderimplementsSender{
@Override
publicvoidSend(){
System.out.println("thisissmssender!");
}
}
最后,建工厂类:
publicclassSendFactory{
publicSenderproduce(Stringtype){
if("mail".equals(type)){
returnnewMailSender();
}elseif("sms".equals(type)){
returnnewSmsSender();
}else{
System.out.println("请输入正确的类型!");
returnnull;
}
}
}
我们来测试下:
publicclassFactoryTest{
publicstaticvoidmain(String[]args){
SendFactoryfactory=newSendFactory();
Sendersender=factory.produce("sms");
sender.Send();
}
}
输出:thisissmssender!
想详细了解的小伙伴可以去原创作者:https://blog.csdn.net/llussize/article/details/80276627

java工厂模式例子详解

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();
}
}

© 版权声明
好牛新坐标
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章