码迷,mamicode.com
首页 > 其他好文 > 详细

工厂方法模式

时间:2015-09-14 19:48:10      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

工厂方法模式

(Factory Method)

摘自:http://blog.csdn.net/zhangerqing/article/details/8194653

工厂方法模式分为三种:

1.1 普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。关系图如下:

技术分享

 

举例如下:(一个发邮件和短信的例子)

首先,创建二者的共同接口:

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");

}

}

 

最后创建工厂类:(用的java8 String 类型支持 switch 语法)

public class SenderFactory {

public Sender produce(String type) {

switch (type) {

case "mail":

return new MailSender();

case "sms":

return new SmsSender();

default:

System.out.println("请输入 正确的类型");

return null;

}

}

}

最后测试一下:

public class Main {

public static void main(String[] args) {

SenderFactory factory = new SenderFactory();

Sender sender = factory.produce("mail");

sender.send();

}

}

 

1.2 多个工厂方法模式:

是对普通工厂方法的模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确的创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象;关系图如下:

技术分享

只需将上面的工厂类修改一下 就行,如下:

public class SenderFactory {

public Sender produceMailSender(){

return new MailSender();

}

public Sender produceSmsSender(){

return new SmsSender();

}

}

测试一下:

public class Main {

public static void main(String[] args) {

SenderFactory factory = new SenderFactory();

Sender sender = factory.produceMailSender();

sender.send();

}

}

1.3 静态工厂方法模式

将上面的多个工厂方法模式里的方法置为静态,不需要创建实例,直接调用即可。

public class SenderFactory {

public static Sender produceMailSender() {

return new MailSender();

}

public static Sender produceSmsSender() {

return new SmsSender();

}

}

测试一下:

public class Main {

public static void main(String[] args) {

Sender sender = SenderFactory.produceMailSender();

sender.send();

}

} 


工厂方法模式

标签:

原文地址:http://my.oschina.net/litengit/blog/505998

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!