上周安排的写两篇设计模式的文章,结果一篇也没写,今天都给写了。回顾+反思。In this world he who stops ,won't get anything he wants!

工厂方法模式分为三种:

1.普通工厂模式  就是建立一个工厂类,对实现接口的一些类进行实例的创建

① 先建立一个“发送方法”的接口

package com.qiao.factory;

public interface Sender {
    public void send();
}

 

 ② 建一个邮件发送类

package com.qiao.factory;

public class MailSendFactory implements Sender {

    public void send() {
        System.out.println("send mail ");
    }
}

 

③ 建一个短信发送类

package com.qiao.factory;

public class SMSSendFactory implements Sender {

    public void send() {
        System.out.println("send sms ");
    }

}

 

④ 工厂类

package com.qiao.factory;

public class SendFactory {
    
    public Sender produce(String type){
        if("sms".equals(type)){
            return new SMSSendFactory();
        }else if("mail".equals(type)){
            return new MailSendFactory();
        }else {
            throw new RuntimeException("请输入正确的类型");
        }
    }
    
}

 

⑤ 测试

    @Test
    public void test1(){
        String type = "ssms";
        Sender send = new SendFactory().produce(type);
        send.send();
    }    

输出  : send sms

 

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

① 工厂类改为

package com.qiao.factory;

public class SendFactory2 {
    
    public Sender mailSenderProduce(){
        return new MailSendFactory();
    }
    public Sender SmsSendProduce(){
        return new SMSSendFactory();
    }
}

 

② 测试

   @Test
    public void test2(){
        Sender send = new SendFactory2().mailSenderProduce();
        send.send();
    }

 

输出 :  send mail 

3.静态工厂方法 就是将上面的方法改为静态方法,这样就不用new了

① 将工厂类改为

package com.qiao.factory;

public class SendFactory3 {
    
    public static Sender mailSenderProduce(){
        return new MailSendFactory();
    }
    public static Sender SmsSendProduce(){
        return  new SMSSendFactory();
    }
}

 

 

②测试

    @Test
    public void test3(){
        Sender send = SendFactory3.mailSenderProduce();
        send.send();
    }

 

输出 : 

send mail

 

以上例子都是抄别人的,写出来好让自己能更好的了解一下。

原文 http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html

 

posted on 2016-06-06 21:46  woqiaoxun  阅读(162)  评论(0编辑  收藏  举报