1.FactoryTest 工厂模式测试类
package com.zhaoshuangjian.mode02_工厂模式; import com.zhaoshuangjian.mode02_工厂模式.factory.ChatFactory1; import com.zhaoshuangjian.mode02_工厂模式.factory.ChatFactory2; import com.zhaoshuangjian.mode02_工厂模式.factory.ChatFactory3; import com.zhaoshuangjian.mode02_工厂模式.mode02.Chat; /** * FactoryTest 工厂模式测试类 * * @Auther: zhaoshuangjian 2023-03-23 下午1:29 */ public class FactoryTest { public static void main(String[] args) { // 1、使用单方法工厂模式进行测试 ChatFactory1 chatFactory1 = new ChatFactory1(); String seqNo = "1"; Chat weixin1 = chatFactory1.createChat("WeiXin"); weixin1.chatting(seqNo); Chat qq1 = chatFactory1.createChat("QQ"); qq1.chatting(seqNo); Chat momo = chatFactory1.createChat("MoMo"); if (momo == null) { System.out.println("创建陌陌聊天工具实例失败"); } else { momo.chatting(seqNo); } System.out.println("=======分割线======="); // 2、使用多方法工厂模式进行测试 ChatFactory2 chatFactory2 = new ChatFactory2(); seqNo = "2"; Chat weixin2 = chatFactory2.createWeiXinChat(); weixin2.chatting(seqNo); Chat qq2 = chatFactory2.createQQChat(); qq2.chatting(seqNo); System.out.println("=======分割线======="); // 3、使用静态工厂模式进行测试(推荐) seqNo = "3"; Chat weixin3 = ChatFactory3.createWeiXinChat(); weixin3.chatting(seqNo); Chat qq3 = ChatFactory3.createQQChat(); qq3.chatting(seqNo); /** * 总结: * 对比发现,静态工厂模式最佳,省了工厂实例的创建 */ } }
2.ChatFactory1 单方法工厂模式
package com.zhaoshuangjian.mode02_工厂模式.factory; import com.zhaoshuangjian.mode02_工厂模式.mode02.Chat; import com.zhaoshuangjian.mode02_工厂模式.mode02.QQ; import com.zhaoshuangjian.mode02_工厂模式.mode02.WeiXin; /** * ChatFactory1 单方法工厂模式 * * @Auther: zhaoshuangjian 2023-03-23 下午1:22 */ public class ChatFactory1 { public Chat createChat(String tools) { if ("QQ".equals(tools)) { return new QQ(); } else if ("WeiXin".equals(tools)) { return new WeiXin(); } else { return null; } } }
3.ChatFactory2 多方法工厂模式-需要哪个用哪个
package com.zhaoshuangjian.mode02_工厂模式.factory; import com.zhaoshuangjian.mode02_工厂模式.mode02.Chat; import com.zhaoshuangjian.mode02_工厂模式.mode02.QQ; import com.zhaoshuangjian.mode02_工厂模式.mode02.WeiXin; /** * ChatFactory2 多方法工厂模式-需要哪个用哪个 * * @Auther: zhaoshuangjian 2023-03-23 下午1:26 */ public class ChatFactory2 { public Chat createQQChat(){ return new QQ(); } public Chat createWeiXinChat(){ return new WeiXin(); } }
4.ChatFactory3 静态工厂模式-无需创建工厂类实例
package com.zhaoshuangjian.mode02_工厂模式.factory; import com.zhaoshuangjian.mode02_工厂模式.mode02.Chat; import com.zhaoshuangjian.mode02_工厂模式.mode02.QQ; import com.zhaoshuangjian.mode02_工厂模式.mode02.WeiXin; /** * ChatFactory3 静态工厂模式-无需创建工厂类实例 * * @Auther: zhaoshuangjian 2023-03-23 下午1:28 */ public class ChatFactory3 { public static Chat createQQChat(){ return new QQ(); } public static Chat createWeiXinChat(){ return new WeiXin(); } }
5.聊天接口
package com.zhaoshuangjian.mode02_工厂模式.mode02; /** * 聊天接口 * * @Auther: zhaoshuangjian 2023-03-23 下午1:22 */ public interface Chat { void chatting(String seqNo); }
6.QQ社交工具实现聊天接口
package com.zhaoshuangjian.mode02_工厂模式.mode02; /** * <p>QQ社交工具实现聊天接口</p> * * @Auther: zhaoshuangjian 2023-03-23 下午1:22 */ public class QQ implements Chat { @Override public void chatting(String seqNo) { System.out.println("使用QQ进行聊天 -- " + seqNo); } }
7.微信社交App实现聊天接口
package com.zhaoshuangjian.mode02_工厂模式.mode02; /** * <p>微信社交App实现聊天接口</p> * * @Auther: zhaoshuangjian 2023-03-23 下午1:22 */ public class WeiXin implements Chat { @Override public void chatting(String seqNo) { System.out.println("使用微信进行聊天 -- " + seqNo); } }