专栏首页JAVAandPython君23种设计模式之简单工厂

23种设计模式之简单工厂

1

写在前面的话

今天我们正式学习23种设计模式之工厂模式,这个模式主要分为三类(简单工厂模式,工厂方法模式,抽象工厂模式),我会分章给大家讲解。

首先来说说工厂模式到底有啥用?它主要作用在于实现了创建者和调用者的分离,啥子意思呢?也就是说我们调用者去创建实例时不会和创建的这个实例直接联系。

其核心本质就是实例化对象,用工厂方法代替new操作。

2

简单工厂模式

–所谓简单工厂模式

• 用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已经写好的代码)

简单工厂模式是最简单的工厂模式也是使用最多的工厂模式,但是它仍然有不足-即违反了面向对象的OCP原则(开闭原则):一个软件的实体应该对拓展开发,对修改关闭

我用一个代码示例来解释一下到底什么是简单工厂模式!

  1. 首先我们写一个Animal.java接口
public interface Animal {
     void speak();
}

这里我们给了动物一个属性-----叫

2. 然后我们分别创建 Dog.java和Cat.java两个类,并且分别都继承Animal接口

public class Cat implements Animal {
    @Override
    public void speak() {
        System.out.println("喵喵喵!");
    }
}
public class Dog implements Animal {
    @Override
    public void speak() {
        System.out.println("汪汪汪!");
    }
}

3. 接下来我们来创建我们的动物工厂 AnimalFactory.java,并且在里面写一个创建动物的方法--CreateAnimal(String type) 并传入一个类型的参数。

public class AnimalFactory {
    public static Animal createAnimal(String type){
        if ("猫".equals(type)){ // 对类型进行判断,并返回各自的对象
            return new Cat();
        }else if ("狗".equals(type)){
            return new Dog();
        }else {
            return null;
        }
    }
}

4. 最后一步就是来测试我们的代码了,我们创建一个Test.java

public class Test {
    public static void main(String[] args){
        Animal a1 = AnimalFactory.createAnimal("猫");
        a1.speak();
        Animal a2 = AnimalFactory.createAnimal("狗");
        a2.speak();
    }
}

运行后的结果:

喵喵喵!
汪汪汪!

Process finished with exit code 0

从上面代码可以看出,我们没有通过 new Cat()或者 new Dog()来创建这些对象,而是通过 createAnimal()这个方法来创建对象,所以实现了创建者和调用者的分离。

但是上面也说过,这种方法存在缺点就是违反了面向对象原则的OCP原则,如果我们再添加一种动物,那么我们必须去修改AnimalFactory里面的代码。

想要解决这个问题,我们可以使用方法工厂模式来解决!请关注下一篇文章!

本文分享自微信公众号 - JAVAandPython君(JAVAandPythonJun),作者:JAP君

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 23种设计模式-方法工厂模式

    – 工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂(用来生产...

    Python进击者
  • 你知道为什么Java的main方法必须是public static void?

    Main 方法是我们学习 Java 编程语言时知道的第一个方法,你是否曾经想过为什么 main 方法是 public、static、void 的。当然,很多人首...

    Python进击者
  • 23种设计模式之建造者模式

    首先,我先举几个生活的场景来描述一下建造者模式。比如一个手机,它是有许多复杂的零件组成,当我们组装这些零件的时候是不是会有一个步骤问题?在实际的开发中...

    Python进击者
  • 工厂模式理解了没有?

    Java3y
  • 初探Java设计模式1:创建型模式(工厂,单例等)

    转自https://javadoop.com/post/design-pattern

    Java技术江湖
  • 初探Java设计模式1:创建型模式(工厂,单例等)

    转自https://javadoop.com/post/design-pattern

    Java技术江湖
  • java编程思想第四版第九章总结

    本章非常重要, 里面的内容涉及到了三个设计模式, 以及接口的有点,掌握这些就是掌握了重点

    用户7798898
  • 二、设计模式总览及工厂模式详解

    不用设计模式并非不可以,但是用好设计模式能帮助我们更好地解决实际问题,设计模式最重要的是解耦。设计模式天天都在用,但自己却无感知。我们把设计模式作为一个专题,主...

    编程之心
  • 设计模式之工厂方法模式(创建型)

    工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使...

    SmileNicky

扫码关注云+社区

领取腾讯云代金券