简单工厂模式:通过接口创建对象,但不会暴露对象创建逻辑
工厂模式从字面上的理解来看,就是一个工厂,而实际意义也是一样的,它就是一个工厂,生产出我们需要的东西,对应现实生活中的工厂,玩具工厂就是生产出玩具的,电子工厂就是生产出各种电子设备的,在Java语言中设计模式里面的工厂模式,就是为我们生产出各种我们需要的对象的,我们不需要关心具体的细节,我们只需要对它说,hi,我需要什么什么什么,然后,它就会给我们什么,就好比你跟一个电子厂说,hi,我需要一台电脑,然后电子厂就给你生产了一台电脑,而你并不需要知道这电脑到底是如何制造出来的,工厂模式的含义我们已经说清楚,接下来我们一起看看工厂模式的分类
简单工厂从字面意思就能看出,相对简单的工厂,它的成本不高,复杂性相对也低,比较适用于业务相对简单,并且业务需求变动少的场景。
下面我们来设定一个简单的场景,并用简单工厂来实现它:
假设我们的项目中有一个发短信的功能,而我们不同的用户可能用的是不同的手机运营商,例如移动、联通、电信,那我们应该如何去实现不同的手机运营商接收到的是不同的短信内容呢?
首先,我们应该先定义一个接口或者是抽象类,两者在这里的含义是一样的,这里使用的是接口,这个接口只有一个方法,就是发短信的方法
public interface Message {
void send();
}
然后我们去定义一个手机运营商的类并实现Message接口的方法,假设我们现在只对接了移动
public class Yidong implements Message {
@Override
public void send() {
System.out.println("hi,我是移动用户的短信内容");
}
}
然后我们再创建一个message的工厂类:MessageFactory,这个工厂类中有一个静态方法getMessage(),接收一个String类型的参数,然后我们将根据这个参数的值判断将要生产哪个运营商的短信内容给用户
public class MessageFactory {
public static Message getMessage(String name){
switch (name){
case "移动":
return new Yidong();
case "联通":
return new Liantong();
}
throw new RuntimeException();
}
}
最后,我们创建一个mian函数来调用这个工厂的静态方法看看
public static void main(String[] args) {
Message message = MessageFactory.getMessage("移动");
message.send();
//最后打印输出的结果为:hi,我是移动用户的短信内容
}
到这里为止,简单工厂就已经完成了,并通过了测试,如果后面有新增的需求,比方说又对接了联通的短信,那么我们只需要新增一个联通的类,并实现Message接口里的方法,然后在MessageFactory中新增一个case分支,在其中new出联通的对象来即可