源码分析前奏之设计模式工厂模式

java 开发都知道再java 软件架构中有6种软件架构原则,23种设计模式,今天我们就来聊聊23种设计模式中的 工厂模式。

工厂模式按照我的理解可以分为3种。简单工厂、复杂工厂、抽象工厂。玩的高级的可能都在用 抽象工厂包括 spring,现在我们仔细分析一下。


1、简单工厂模式

​ 工作中我们难免会发消息,微信、钉钉等现在我们用简单工厂模式生产一下这几种消息的发送。

Message.java

package simple;

public interface Message {

    String getMessage(String name);
}

DingDingMessage.java

package simple;

public class DingDingMessage implements Message{

    @Override
    public String getMessage(String name) {
        //调用钉钉接口发消息
        return "钉钉消息";
    }
}

WeChatMessage.java

package simple;

public class WeChatMessage implements Message{

    @Override
    public String getMessage(String name) {
        //调用微信接口发消息
        return "微信消息";
    }
}

SimpleFactory.java

package simple;

public class SimpleFactory {

    public Message getMessage(String name){

        if("DingDing".equals(name)){
            return new DingDingMessage();
        } else if ("WeChat".equals(name)){
            return new WeChatMessage();
        }
        return null;

    }
}

SimpleFactoryTest.java

package simple;

public class SimpleFactoryTest {

    public static void main(String[] args) {
        SimpleFactory simpleFactory = new SimpleFactory();
        Message dingDing = simpleFactory.getMessage("WeChat");
        System.out.println(dingDing);
    }
}

好的到此简单工厂已经完成了消息的发送。这种工厂模式其实有有好多不合适的地方。例如现在用户想发一个qq 的消息可以他的自己想现在支持发qq的消息吗,

*Message dingDing = simpleFactory.getMessage(“qq”);*同时我们为了支持这种消息还的实现Message接口再SimpleFactory中增加一种判断,这样用户体验不好,也不符合开闭原则。

2、复杂工厂模式

Factory.java

package complex;

import simple.Message;

public interface Factory {

    public Message getMessage();
}

DingDingMessageFactory.java

package complex;

import simple.DingDingMessage;
import simple.Message;

public class DingDingMessageFactory implements Factory{


    @Override
    public Message getMessage() {
        return new DingDingMessage();
    }
}

WechatMessageFactory.java

package complex;

import simple.Message;
import simple.WeChatMessage;

public class WechatMessageFactory implements Factory{

    @Override
    public Message getMessage() {
        return new WeChatMessage();
    }
}

ComplexFactoryTest.java

package complex;

public class ComplexFactoryTest {

    public static void main(String[] args) {
        //Factory factory = new DingDingMessageFactory();
        Factory factory = new WechatMessageFactory();
        System.out.println(factory.getMessage());
    }
}

复杂工厂模式按照工厂进行了分工了,现在需要扩展一个qq消息可能就比较简单了只需要 implements Factory就可以了,也符合开闭原则,但是对用户操作还是不太合适他的需要知道 Factory factory = new QqMessageFactory();并行每次扩展需要implements Factory 可能会导致 类增多那现在我们又没有其它的方式了呢,答案是有的那就是抽象工厂。

3、抽象工厂

AbstractFactory.java

package advanced;

import simple.Message;

public abstract class AbstractFactory {


    /*
    有自己的逻辑实现,还有接口的规范功能
     */

   abstract Message getDingDingMessage();

   abstract Message getWeChatMessage();
}

AdvancedFactroy.java

package advanced;

import simple.DingDingMessage;
import simple.Message;
import simple.WeChatMessage;

public class AdvancedFactroy extends AbstractFactory{

    @Override
    public Message getDingDingMessage() {
        return new DingDingMessage();
    }

    @Override
    public Message getWeChatMessage() {
        return new WeChatMessage();
    }
}

AdvancedFactoryTest.java

package advanced;

public class AdvancedFactoryTest {

    public static void main(String[] args) {
        AdvancedFactroy advancedFactroy = new AdvancedFactroy();
        //System.out.println(advancedFactroy.getDingDingMessage());
        System.out.println(advancedFactroy.getWeChatMessage());
    }
}

现在看是不是有的不一样的感觉呢,用户不需要操作其它的api只需要再advancedFactroy.getxxxMessage()就可以了,并且扩展的时候只需要再AbstractFactory增加一个 abstract即可。

到此不知道您对工厂模式是不是有个大体的理解了呢,今天的分享就到这个,下次我们分享单例设计模式。如果您有自己的理解欢迎和我交流 1129098627@qq.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值