23种设计模式之工厂方法模式
程序员文章站
2024-01-05 17:14:22
...
工厂方法模式分三种:
1.普通工厂方法模式
2.多个工厂方法模式
3.静态工厂方法模式
例:
普通工厂方法模式:
/**
* CLASSNAME:Sender
* AUTHOR:邓望保 lenovo
* 邮箱:[email protected]
* 电话:18665996821
* DATE:2018/3/7 23:29
* 描述1: 工厂方法模式-普通工厂方法模式
* 描述2: 第一步:定义一个接口,写一个公共的抽象方法
*
*/
public interface Sender {
public void send();
}
/**
* CLASSNAME:MailSender
* AUTHOR:邓望保 lenovo
* 邮箱:[email protected]
* 电话:18665996821
* DATE:2018/3/8 23:41
* 描述1:
* 描述2:
*/
public class MailSender implements Sender {
@Override
public void send() {
System.out.println("发送邮件");
}
}
/**
* CLASSNAME:SmsSender
* AUTHOR:邓望保 lenovo
* 邮箱:[email protected]
* 电话:18665996821
* DATE:2018/3/8 23:44
* 描述1: 工厂方法--普通工厂方法: 第二步,创建一个Sender实现类,实现它的方法
* 描述2:
*/
public class SmsSender implements Sender {
@Override
public void send() {
System.out.println("发送短信!");
}
}
/**
* CLASSNAME:SendFactory
* AUTHOR:邓望保 lenovo
* 邮箱:[email protected]
* 电话:18665996821
* DATE:2018/3/8 23:47
* 描述1: 第三步,创建工厂,根据传入的值,生产不同的产品
* 描述2:
*/
public class SendFactory {
public Sender produce(String type){
if (type.equals("sms")){
return new SmsSender();
}else if(type.equals("mail")){
return new MailSender();
}else {
return null;
}
}
}
/**
* CLASSNAME:Test
* AUTHOR:邓望保 lenovo
* 邮箱:[email protected]
* DATE:2018/3/7 23:49
* 描述1:普通工厂模式 第四步:检验结果,
* 描述2:
*/
public class Test {
public static void main(String[] args) {
SendFactory factory = new SendFactory();
Sender sender = factory.produce("sms");
sender.send();
}
}
例2:多个工厂方法模式:
只需要对上面代码做少许更改
/**
* CLASSNAME:SendFactory
* AUTHOR:邓望保 lenovo
* 邮箱:[email protected]
* 电话:18665996821
* DATE:2018/3/8 23:47
* 描述1: 第三步,创建工厂(多个工厂方法模式),根据传入的值,生产不同的产品
* 描述2:
*/
public class SendFactory {
// public Sender produce(String type) {
// if (type.equals("sms")) {
// return new SmsSender();
// } else if (type.equals("mail")) {
// return new MailSender();
// } else {
// return null;
// }
// }
public Sender produceMail() {
return new MailSender();
}
public Sender produceSms() {
return new SmsSender();
}
}
检验结果:
/**
* CLASSNAME:Test
* AUTHOR:邓望保 lenovo
* 邮箱:[email protected]
* DATE:2018/3/7 23:49
* 描述1:普通工厂模式 第四步:检验结果,
* 描述2:
*/
public class Test {
public static void main(String[] args) {
//第一种 普通工厂方法模式
// SendFactory factory = new SendFactory();
// Sender sender = factory.produce("sms");
// sender.send();
//第二种:多个工厂方法模式
SendFactory factory=new SendFactory();
Sender sender = factory.produceMail();
sender.send();
}
}
例3:静态工厂方法模式
/**
* CLASSNAME:SendFactory
* AUTHOR:邓望保 lenovo
* 邮箱:[email protected]
* 电话:18665996821
* DATE:2018/3/8 23:47
* 描述1: 第三步,创建工厂(多个工厂方法模式),根据传入的值,生产不同的产品
* 描述2:
*/
public class SendFactory {
// public Sender produce(String type) {
// if (type.equals("sms")) {
// return new SmsSender();
// } else if (type.equals("mail")) {
// return new MailSender();
// } else {
// return null;
// }
// }
//第二种:多个工厂方法模式
// public Sender produceMail() {
// return new MailSender();
// }
//
// public Sender produceSms() {
// return new SmsSender();
// }
//第三种 静态工厂方法模式(简单理解,就是第一种和第二种的工厂方法上都加个静态即可:如下)
public static Sender produce(String type){
if (type.equals("sms")) {
return new SmsSender();
} else if (type.equals("mail")) {
return new MailSender();
} else {
return null;
}
}
}
验证结果:
/**
* CLASSNAME:Test
* AUTHOR:邓望保 lenovo
* 邮箱:[email protected]
* DATE:2018/3/7 23:49
* 描述1:普通工厂模式 第四步:检验结果,
* 描述2:
*/
public class Test {
public static void main(String[] args) {
//第一种 普通工厂方法模式
// SendFactory factory = new SendFactory();
// Sender sender = factory.produce("sms");
// sender.send();
//第二种:多个工厂方法模式
// SendFactory factory=new SendFactory();
// Sender sender = factory.produceMail();
// sender.send();
//第三种,静态工厂方法模式
Sender sender = SendFactory.produce("sms");
sender.send();
}
}