参考:https://blog.csdn.net/ithouse/article/details/93590797
工厂模式和抽象工厂模式的区别,以及如何实现
1.工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
2.工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
工厂模式
package single.factory;
//定义一个方法接口
public interface Sender {
void send();
}
package single.factory;
//选择发送方式,重写发送方法
public class EmailSender implements Sender {
@Override
public void send() {
System.out.println("这是用邮箱发送的消息");
}
}
pac
kage single.factory;
//选择发送方式,重写发送方法
public class WeChatSender implements Sender {
@Override
public void send() {
System.out.println("这是用微信发送的消息");
}
}
package single.factory;
//工厂来生成发送的具体动作,如何发送
public class Factory {
public Sender generateSender(String type){
if(type.equals("email")){
return new EmailSender();
}
else if(type.equals("WeChat")){
return new WeChatSender();
}
else {
return null;
}
}
}
package single.factory;
public class TestFactory {
public static void main(String[] args){
//普通工厂模式
Factory factory = new Factory();
//根据对象调用相应的方法
Sender wechat = factory.generateSender("WeChat");
wechat.send();
Sender email = factory.generateSender("email");
email.send();
}
}
抽象工厂模式
package single.factory;
//定义一个方法接口
public interface Sender {
void send();
}
package single.abstractfactory;
import single.factory.Sender;
//将Factory抽象出来,需要什么工厂就自己去创建什么工厂
public interface Factory {
Sender generateSender();
}
package single.abstractfactory;
import single.factory.EmailSender;
import single.factory.Sender;
//需要啥方法就构建出什么样的工厂
public class EmailFactory implements Factory {
@Override
public Sender generateSender() {
return new EmailSender();
}
}
package single.abstractfactory;
import single.factory.Sender;
import single.factory.WeChatSender;
//需要啥方法就构建出什么样的工厂
public class WeChatFactory implements Factory {
@Override
public Sender generateSender() {
return new WeChatSender();
}
}
package single.abstractfactory;
import single.factory.Sender;
public class TestFactory {
public static void main(String[] args){
Factory wechat = new WeChatFactory() ;
Sender wechatSender = wechat.generateSender();
wechatSender.send();
Factory email = new EmailFactory();
Sender emailSender = email.generateSender();
emailSender.send();
}
}