设计模式之工厂模式

[看不懂文字描叙的,可以直接跳过看demo]

工厂模式的特点是创建出来的产品的特性是有一致性的。本文是以发送者(发送邮件,发送短信)去发送一些不同的信息,使用SenderFactroy工厂类去生产不同的发送者,再通过不同的发送者去发送信息的一个demo实例。

第一步:定义发送者接口ISender接口类

/**
 * 发送者的接口
 */
public interface ISender {

    /**
     * 发送消息
     * @param msg 消息
     */
    void send(String msg);

}

第二步:创建发送邮件EmailSender与发送短信SmsSender两个类,且都去实现ISender接口

/**
 * 邮件发送者
 */
public class EmailSender implements ISender {

    @Override
    public void send(String msg) {
        System.out.println("我是邮件发送者:"+msg);
    }
}
/**
 * 信息发送者
 */
public class SmsSender implements ISender {

    @Override
    public void send(String msg) {
        System.out.println("我是短信发送者:"+msg);
    }
}

第三步:构建生产的工厂类SenderFactroy类,去生产邮件与短信的发送者

/**
 * 1.使用反射的方式构建SenderFactroy
 */
public class SenderFactroy {

    //创建发送者
    public static<T> ISender createSender(Class<T> clz){
        try {
            return (ISender) clz.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }

}
/**
 * 2.使用传参的方式构建SenderFactroy
 */
public class SenderFactroy2 {

    //    邮件发送
    public static final int EMAIL_CODE = 0x01;
    //    短信发送
    public static final int SMS_CODE = 0x02;

    //    空的ISender
    public static final ISender SENDER_NULL = new ISender() {
        @Override
        public void send(String msg) {

        }
    };

    //创建发送者
    public static ISender createSender(int senderCode) {
        switch (senderCode) {
            case EMAIL_CODE:
                return new EmailSender();
            case SMS_CODE:
                return new SmsSender();
            default:
                return SENDER_NULL;
        }
    }

}

第四步:调用的实例的运行结果

设计模式之工厂模式