设计模式part1
工厂方法模式
工厂方法模式分为三种:1、普通工厂模式 2、多个工厂方法模式 3、静态工厂方法模式
1) 普通工厂模式
就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建
缺点:如果字符串输入不对应就会创建错误
【java】Sender
publicinterface Sender {
void send();
}
【java】SmsSender
publicclass SmsSender implements Sender{
@Override
publicvoid send() {
System.out.println("sms sender");
}
}
【java】MailSender
publicclass MailSender implements Sender{
@Override
publicvoid send() {
System.out.println("mail sender");
}
}
【java】SendFactory
publicclass SendFactory {
public Sender produce(Stringstr){
if("sms".equals(str)){
returnnew SmsSender();
}elseif("mail".equals(str)){
returnnew MailSender();
}else{
System.out.println("未选择类型");
returnnull;
}
}
}
【java】MainTest
publicclass MainTest {
publicstaticvoid main(String[] args) {
SendFactoryfactory = new SendFactory();
Sendersender = factory.produce("sms");
sender.send();
}
}
2) 多个工厂方法模式
是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象
Note:对普通工厂进行改进,使用不通的方法创建不同的对象
【java】Sender
publicinterface Sender {
void send();
}
【java】SmsSender
publicclass SmsSender implements Sender{
@Override
publicvoid send() {
System.out.println("sms sender");
}
}
【java】MailSender
publicclass MailSender implements Sender{
@Override
publicvoid send() {
System.out.println("mail sender");
}
}
【java】SendFactory
publicclass SendFactory {
public Sender produceSms() {
returnnew SmsSender();
}
public Sender produceMail() {
returnnew MailSender();
}
}
【java】MainTest
publicclass MainTest {
publicstaticvoid main(String[] args) {
SendFactoryfactory = new SendFactory();
Sendersender = factory.produceMail();
sender.send();
}
}
3) 静态工厂方法模式
将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
【java】Sender
publicinterface Sender {
void send();
}
【java】SmsSender
publicclass SmsSender implements Sender{
@Override
publicvoid send() {
System.out.println("sms sender");
}
}
【java】MailSender
publicclass MailSender implements Sender{
@Override
publicvoid send() {
System.out.println("mail sender");
}
}
【java】SendFactory
publicclass SendFactory {
publicstatic Sender produceSms() {
returnnew SmsSender();
}
publicstatic Sender produceMail() {
returnnew MailSender();
}
}
【java】MainTest
publicclass MainTest {
publicstaticvoid main(String[] args) {
Sendersender = SendFactory.produceMail();
sender.send();
}
}