前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >23种设计模式之简单工厂

23种设计模式之简单工厂

作者头像
Python进击者
发布2019-09-17 15:14:54
3080
发布2019-09-17 15:14:54
举报
文章被收录于专栏:JAVAandPython君

1

写在前面的话

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

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

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

2

简单工厂模式

–所谓简单工厂模式

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

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

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

  1. 首先我们写一个Animal.java接口
代码语言:javascript
复制
public interface Animal {
     void speak();
}

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

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

代码语言:javascript
复制
public class Cat implements Animal {
    @Override
    public void speak() {
        System.out.println("喵喵喵!");
    }
}
代码语言:javascript
复制
public class Dog implements Animal {
    @Override
    public void speak() {
        System.out.println("汪汪汪!");
    }
}

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

代码语言:javascript
复制
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

代码语言:javascript
复制
public class Test {
    public static void main(String[] args){
        Animal a1 = AnimalFactory.createAnimal("猫");
        a1.speak();
        Animal a2 = AnimalFactory.createAnimal("狗");
        a2.speak();
    }
}

运行后的结果:

代码语言:javascript
复制
喵喵喵!
汪汪汪!

Process finished with exit code 0

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python进击者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档