志在指尖
用双手敲打未来

java工厂模式(例子详解)

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

未经允许不得转载:IT技术网站 » java工厂模式(例子详解)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载