设计模式之工厂模式
[看不懂文字描叙的,可以直接跳过看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; } } }
第四步:调用的实例的运行结果