- 簡單工廠和靜態(tài)工廠模式
- 流程:定義接口——>定義接口的實現(xiàn)類——>定義工廠生產(chǎn)產(chǎn)品
public interface Sender {
void send();
}
public class MailSender implements Sender {
@Override
public void send() {
System.out.println("this is mail sender");
}
}
public class SmsSender implements Sender {
@Override
public void send() {
System.out.println("this is Sms sender");
}
}
class SendFactory {
/**
* 靜態(tài)工廠的方法
*
* @return
*/
static MailSender getMailSender() {
return new MailSender();
}
/**
* 靜態(tài)工廠的方法
*
* @return
*/
static SmsSender getSmsSender() {
return new SmsSender();
}
/**
* 普通工廠的方法
*
* @param type
* @return
*/
Sender produce(String type) {
switch (type) {
case "mail":
return new MailSender();
case "sms":
return new SmsSender();
default:
return null;
}
}
}
public class FactoryTest {
public static void main(String args[]) {
//普通工廠
SendFactory factory = new SendFactory();
Sender sms = factory.produce("sms");
sms.send();
System.out.println("----------------");
Sender mail = factory.produce("mail");
mail.send();
//靜態(tài)工廠
MailSender mailSender = SendFactory.getMailSender();
mailSender.send();
SmsSender smsSender = SendFactory.getSmsSender();
smsSender.send();
}
}
- 抽象工廠模式
- 流程:定義方法接口——>定義方法接口的實現(xiàn)類——>定義工廠類接口——>定義工廠類
public interface Sender {
void send();
}
public class MailSender implements Sender {
@Override
public void send() {
System.out.println("this is mail sender");
}
}
public class SmsSender implements Sender{
@Override
public void send() {
System.out.println("this is sms sender");
}
}
public interface Provider {
Sender produce();
}
public class MailFactory implements Provider {
@Override
public Sender produce() {
return new MailSender();
}
}
public class SmsFactory implements Provider {
@Override
public Sender produce() {
return new SmsSender();
}
}
public class AbsFactoryTest {
public static void main(String args[]) {
Provider smsProvider = new SmsFactory();
Sender smsProduce = smsProvider.produce();
smsProduce.send();
//也可以
smsProvider.produce().send();
Provider mailProvider = new MailFactory();
Sender mailProduce = mailProvider.produce();
mailProduce.send();
//也可以
mailProvider.produce().send();
}
}
建議用抽象工廠模式掠河,便于以后的拓展