标签:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。
就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:
interface Sender{
public void send();
}
class MailSender implements Sender{
public void send(){
System.out.println("MailSender");
}
}
class SmsSender implements Sender{
public void send(){
System.out.println("SmsSender");
}
}
class SenderFactory{
public Sender produce(String type){
if ("Mail".equals(type)){
return new MailSender();
}
else if ("Sms".equals(type)){
return new SmsSender();
}
else{
System.out.println("Please enter a valid type!");
return null;
}
}
}
public class FactoryTest {
public static void main(String[] args){
SenderFactory factory = new SenderFactory();
Sender sender = factory.produce("Mail");
sender.send();
}
}
对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。关系图:
工厂类和测试类修改如下:
class SenderFactory{
public Sender produceMail(){
return new MailSender();
}
public Sender produceSms(){
return new SmsSender();
}
}
public class FactoryTest {
public static void main(String[] args){
SenderFactory factory = new SenderFactory();
Sender sender = factory.produceMail();
sender.send();
}
}
将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
工厂类和测试类修改如下:
class SenderFactory{
public static Sender produceMail(){
return new MailSender();
}
public static Sender produceSms(){
return new SmsSender();
}
}
public class FactoryTest {
public static void main(String[] args){
Sender sender = SenderFactory.produceMail();
sender.send();
}
}
提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。
interface Sender{
public void send();
}
class MailSender implements Sender{
public void send(){
System.out.println("MailSender");
}
}
class SmsSender implements Sender{
public void send(){
System.out.println("SmsSender");
}
}
interface Provider{
public Sender produce();
}
class SendMailFactory implements Provider{
public Sender produce(){
return new MailSender();
}
}
class SendSmsFactory implements Provider{
public Sender produce(){
return new SmsSender();
}
}
public class FactoryTest {
public static void main(String[] args){
Provider provider = new SendMailFactory();
Sender sender = provider.produce();
sender.send();
}
}
保证在应用程序中,一个类Class只有一个实例存在。并提供全局访问。
public class Singleton {
private static Singleton instance = null;
private Singleton(){
}
public synchronized void syncInit(){
if (instance == null){
instance = new Singleton();
}
}
public Singleton getInstance(){
if (instance == null){
syncInit();
}
return instance;
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/foreverling/article/details/46845433