1.工厂方法模式:分三种
这是我给大家介绍的8个面试必问的设计模式的第一类:工厂模式.学完这8类必会的那么面试就不会有什么问题了,其余的无非都是多态的演变.好的开始讲解第一类:
1.普通工厂
建立一个工厂类,对"实现同一接口"的一些类进行实例的创建.
2.多个工厂
在普通的基础上,如果传递的字符串出错,就不能创建,并提供多个工厂方法,分别创建对象.
3.静态工厂方法
将多个工厂的方法改成"静态",不用创建实例,直接调用即可
1.普通工厂:
/**
* 普通工厂类:
* 1.一个接口
* 2.多个具体实现了接口的"类"
* 3.创建一个发送信息"工厂类"
* 包含一个统一的方法:对实现了"同一接口的类",进行实例的创建.
*/
//发送接口
interface Send {
public void send();
}
//发送短信类,实现发送类
class SendMessage implements Send {
@Override
public void send() {
System.out.println("发送了 短信...");
}
}
//发送邮件类,实现发送类
class SendEmail implements Send {
@Override
public void send() {
System.out.println("发送了 邮件...");
}
}
//发送工厂类
class SendFactory {
public Send method(String type) {
//根据传值的不同进行判断,得到不同的对象.
if ("message".equals(type)) {
return new SendMessage();
}
else if ("email".equals(type)) {
return new SendEmail();
} else {
System.out.println("输入类型不正确");
return null;
}
}
}
//测试类:
public class Test {
public static void main(String[] args) {
SendFactory sf = new SendFactory();
final Send email = sf.method("email");
email.send();
final Send message = sf.method("message");
message.send();
final Send phone = sf.method("phone");
if (phone != null) {
phone.send();
}
}
}
打印结果:
发送了 邮件...
发送了 短信...
输入类型不正确
2.多个工厂模式:
/**
* 多个工厂类:
* 1.(Ps)在普通的基础上加上升级:每个实例"都创建"对应的方法
* 2.后续直接调用对应方法即可,防止了输入字符串出错
*/
public class SendFactory {
//指指定的多个方法,防止出错
public Send sendEmailmethod() {
return new SendEmail();
}
public Send sendMessageMethos() {
return new SendMessage();
}
}
//测试类:
public class Test {
public static void main(String[] args) {
SendFactory sf = new SendFactory();
//因为有选择了,所以不会出错
final Send email = sf.sendEmailmethod();
email.send();
final Send message = sf.sendMessageMethos();
message.send();
}
}
打印结果:
发送了 邮件...
发送了 短信...
3.静态工厂模式:
/**
* 就改成个静态即可.
* (Ps+)在多个工厂的基础上,把工厂的中的方法改成静态,那么等下就不用new 工厂类了
*/
//发送工厂类
public class SendFactory {
//指指定的多个方法,防止出错
//只需把这里改成static 方法即可
public static Send sendEmailmethod() {
return new SendEmail();
}
public static Send sendMessageMethos() {
return new SendMessage();
}
}
//测试类:
public class Test {
public static void main(String[] args) {
//因为是静态方法,所以直接调用即可,不用new 工厂类
Send email = SendFactory.sendEmailmethod();
email.send();
final Send message = SendFactory.sendMessageMethos();
email.send();
}
}
打印结果:
发送了 邮件...
发送了 短信...