23种设计模式_MODE02工厂方法模式_手写代码实现

23种设计模式_MODE02工厂方法模式_手写代码实现_第1张图片

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;

/**
 * 

QQ社交工具实现聊天接口

* * @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;

/**
 * 

微信社交App实现聊天接口

* * @Auther: zhaoshuangjian 2023-03-23 下午1:22 */ public class WeiXin implements Chat { @Override public void chatting(String seqNo) { System.out.println("使用微信进行聊天 -- " + seqNo); } }

你可能感兴趣的:(三,设计模式,设计模式,工厂方法模式,java)