Java设计模式之工厂模式

来源:互联网 发布:机甲英雄青龙合体数据 编辑:程序博客网 时间:2024/05/08 11:33

1.工厂方法模式(Factory Method)

  • 普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建
  • 多个工厂方法模式,是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法
  • 静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

2.UML建模图如下

这里写图片描述

3.代码实现如下

(1)接口类Sender,代码如下

package com.zhoujian.factorymethod.impl;/** * Created by zhoujian on 2016/12/1. * * 定义发送的接口,具体发送的类型让子类实现 */public interface Sender{    public void send();}

(2)具体实现类MailSender和SmsSender

MailSender.java

package com.zhoujian.factorymethod.bean;import android.content.Context;import android.widget.Toast;import com.zhoujian.factorymethod.impl.Sender;/** * Created by zhoujian on 2016/12/1. * * 发送邮件 要实现接口 */public class MailSender implements Sender{    private Context mContext;    public MailSender(Context mContext)    {        this.mContext = mContext;    }    @Override    public void send()    {        Toast.makeText(mContext, "发送邮件", Toast.LENGTH_SHORT).show();    }}

SmsSender.java

package com.zhoujian.factorymethod.bean;import android.content.Context;import android.widget.Toast;import com.zhoujian.factorymethod.impl.Sender;/** * Created by zhoujian on 2016/12/1. * * 发送短信  要实现接口 */public class SmsSender implements Sender{    private Context mContext;    public SmsSender(Context mContext)    {        this.mContext = mContext;    }    @Override    public void send()    {        Toast.makeText(mContext, "发送短信", Toast.LENGTH_SHORT).show();    }}

(3)工厂类SenderFactory

package com.zhoujian.factorymethod.factory;import android.content.Context;import android.widget.Toast;import com.zhoujian.factorymethod.bean.MailSender;import com.zhoujian.factorymethod.bean.SmsSender;import com.zhoujian.factorymethod.impl.Sender;/** * Created by zhoujian on 2016/12/1. * * 发送的工厂类 */public class SenderFactory{    private static final String TAG = "SenderFactory";    /**     * 工厂类方法,返回的是一个接口类     * @param type     * @return Sender     */    //普通工厂模式  (如果传递的字符串出错,就不能创建对象)    public Sender produceSend(Context mContext, String type)    {        if (type.equals("sendmail"))        {            return new MailSender(mContext);        }        else if(type.equals("sendsms"))        {            return new SmsSender(mContext);        }        else        {            Toast.makeText(mContext, "请输入正确的类型", Toast.LENGTH_SHORT).show();            return null;        }    }    //多个工厂方法模式(创建多个)    public  Sender produceMailSend(Context mContext)    {        return new MailSender(mContext);    }    public Sender produceSmsSend(Context mContext)    {        return new SmsSender(mContext);    }    //静态工厂方法模式(比较常用,类可以直接调用)    public static Sender produceMail(Context mContext)    {        return new MailSender(mContext);    }    public static Sender produceSms(Context mContext){        return new SmsSender(mContext);    }}

4.下载地址

下载地址:https://github.com/zeke123/FactoryMethod

0 0
原创粉丝点击