美文网首页
【Java进阶营】设计模式-创建模式-工厂模式

【Java进阶营】设计模式-创建模式-工厂模式

作者: 梦幻小孩斋 | 来源:发表于2022-05-14 15:51 被阅读0次
    从这一块开始,我们详细介绍 Java 中 23 种设计模式的概念,应用场景等情况,并结合他们 的特点及设计模式的原则进行分析。

    首先,简单工厂模式不属于 23 中涉及模式,简单工厂一般分为:普通简单工厂、多方法简单 工厂、静态方法简单工厂。

简单工厂模式

    简单工厂模式模式分为三种:普通就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:

image

举例如下:(我们举一个发送邮件和短信的例子)

首先,创建二者的共同接口:

public interface Sender {

** public void Send();**

}

其次,创建实现类:

public class MailSender implements Sender {

** @Override**

** public void Send() {**

** System.out.println("this is mailsender!");**

** }**

}

public class SmsSender implements Sender {

** @Override**

** public void Send() {**

** System.out.println("this is sms sender!");**

** }**

}

最后,建工厂类:

public class SendFactory {

public Sender produce(String type) {

if ("mail".equals(type)) {

    return new MailSender();

} else if ("sms".equals(type)) {

    return new SmsSender();

} else {

    System.out.println("请输入正确的类型!");

    return null;

}

}

}

我们来测试下:

public class FactoryTest {

 public static void main(String[] args) {

    SendFactory factory = new SendFactory();

    Sender sender = factory.produce("sms");

    sender.Send();

 }

}

输出:this is sms sender!

    总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通 过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创 建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三 种——静态工厂方法模式。

工厂方法模式(Factory Method)

    简单工厂模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对 工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就 用到工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能, 直接增加新的工厂类就可以了,不需要修改之前的代码。

image

请看例子:

public interface Sender {

 public void Send();

}

两个实现类:

public class MailSender implements Sender {

@Override

public void Send() {

    System.out.println("this is mailsender!");

}

}

public class SmsSender implements Sender {

@Override

public void Send() {

System.out.println("this is sms sender!");

}

}

两个工厂类:

public class SendMailFactory implements Provider {

    @Override

    public Sender produce(){

        return new MailSender();

    }

}

public class SendSmsFactory implements Provider{

@Override

public Sender produce() {

    return new SmsSender();

}

}

在提供一个接口:

public interface Provider {

    public Sender produce();

}

测试类:

public class Test {

    public static void main(String[] args) {

        Provider provider = new SendMailFactory();

        Sender sender = provider.produce();

        sender.Send();

 }

}

   其实这个模式的好处就是,如果你现在想增加一个功能:发及时信息,则只需做一个实现类, 实现 Sender 接口,同时做一个工厂类,实现 Provider 接口,就 OK 了,无需去改动现成的代 码。这样做,拓展性较好!在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

抽象工厂模式

工厂方法模式和抽象工厂模式不好分清楚,他们的区别如下:

工厂方法模式:

**一个抽象产品类,可以派生出多个具体产品类。**

** 一个抽象工厂类,可以派生出多个具体工厂类。**

** 每个具体工厂类只能创建一个具体产品类的实例。**

抽象工厂模式:

   ** 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。**

** 一个抽象工厂类,可以派生出多个具体工厂类。 **

** 每个具体工厂类可以创建多个具体产品类的实例,也就是创建的是一个产品线下的多个产品。**

区别:

    工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。

    工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

    工厂方法创建 "一种" 产品,他的着重点在于"怎么创建",也就是说如果你开发,你的大量代 码很可能围绕着这种产品的构造,初始化这些细节上面。也因为如此,类似的产品之间有很多 可以复用的特征,所以会和模版方法相随。

    抽象工厂需要创建一些列产品,着重点在于"创建哪些"产品上,也就是说,如果你开发,你的 主要任务是划分不同差异的产品线,并且尽量保持每条产品线接口一致,从而可以从同一个抽象工厂继承。

对于 java 来说,你能见到的大部分抽象工厂模式都是这样的:

---它的里面是一堆工厂方法,每个工厂方法返回某种类型的对象。

    比如说工厂可以生产鼠标和键盘。那么抽象工厂的实现类(它的某个具体子类)的对象都可以 生产鼠标和键盘,但可能工厂 A 生产的是罗技的键盘和鼠标,工厂 B 是微软的。

    这样 A 和 B 就是工厂,对应于抽象工厂; 每个工厂生产的鼠标和键盘就是产品,对应于工厂方法;

    用了工厂方法模式,你替换生成键盘的工厂方法,就可以把键盘从罗技换到微软。但是用了抽 象工厂模式,你只要换家工厂,就可以同时替换鼠标和键盘一套。如果你要的产品有几十个, 当然用抽象工厂模式一次替换全部最方便(这个工厂会替你用相应的工厂方法)

   所以说抽象工厂就像工厂,而工厂方法则像是工厂的一种产品生产线

相关文章

  • 工厂模式

    java设计模式-工厂模式 工厂模式: 工厂模式是java设计模式里最常用的设计模式之一。 工厂模式属于创建型模式...

  • 设计模式——工厂模式和抽象工厂模式

    Java设计模式——工厂模式 工厂模式和抽象工厂模式都属于创建型模式。 创建型模式这些设计模式提供了一种在创建对象...

  • 简单工厂模式

    Android进阶之设计模式 简单工厂模式 简单工厂模式(又叫作静态工厂方法模式), 其属于创建型设计模式,但并不...

  • 设计模式之工厂模式

    工厂模式 工厂模式(Factory Pattern)是Java中最常用的设计模式之一,这种设计模式属于创建型模式,...

  • 设计模式---工厂模式

    设计模式之工厂模式 是java中最常见的设计模式之一,属于创建类型模式,提供了最佳的创建对象的方法。在工厂模式中,...

  • 【Java进阶营】设计模式-创建模式-工厂模式

    简单工厂模式 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: public interf...

  • 总览

    1 书籍推荐 《Java设计模式》 2 分类 创建型模式 工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模...

  • 设计模式

    Java的设计有23种设计模式。主要分为三大类:创建型模式、结构型模式、行为模式。 创建型模式:工厂模式、建造模式...

  • Java设计模式教程

    Java设计模式教程 Java工厂设计模式 Java抽象工厂模式 Java单例模式 Java建造者(Builder...

  • 简单工厂模式

    Java23种设计模式--简单工厂模式 一、什么是简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法...

网友评论

      本文标题:【Java进阶营】设计模式-创建模式-工厂模式

      本文链接:https://www.haomeiwen.com/subject/juhqyrtx.html