不会吧!不会吧!不会工作一两年了还不懂得工厂模式吧!

241 阅读3分钟

不是吧!不是吧!你不会是看了好多文章都没看懂简单工厂设计模式吧!是不是被一段段专业名词整懵了。来吧!我们试着用简单的方式来了解简单工厂模式。

首先,我们来说说什么是设计模式,专业的介绍呢,这里建议打开百度。

我说说我对设计模式的理解吧。设计模式可以理解为一本经验书,一本让你升级的经验书。这本经验书的由来是前辈们在开发的过程中发现了很多问题。

前辈:咦!这段代码怎么创建了这么多对象呀。不符合我大侠的身份。可恶,我要对它进行改造。

前辈:哇,我太牛了,这问题都能解决了。我必须让这个经验包传下去。*

于是就有了设计模式。设计模式类就是一本前辈们留下的经验包,当然要深入了解,吸收,然后让它变成自己的九阳神功。

设计模式中一共有23种设计模式,这23本秘籍经验包可以分为三大类,分别是创建型,结构型,行为型 进入主题,我们来说说今天的主角,创建型里面的老拳手简单工厂模式

你先想象一个场景,在一个愉快的周末,你想打游戏,电脑里有多个游戏可以给你选择,有Apex英雄,Dota2,永劫无间。

以上的场景你如果要用伪代码的方式来实现,会不会是这样的。

new Apex英雄
Apex英雄.play();
System.out.println("一个打三个?真无聊。换游戏,换游戏");

new Dota2
Dota2.play();
System.out.println("就一个人玩,真无聊。换游戏,换游戏");

new 永劫无间
永劫无间.play();
System.out.println("振刀真好玩。");

大家发现上面代码的问题了吗?

对象的创建非常的凌乱,没办法维护,那bug当然就多了,万一未来的某天,Dota2这个游戏类要改名叫Dota3,那所有调用到Dota2这个类的方法都要改。

为了解决这些问题,所有简单工程模式出现了。

简单模式的实现

1、首先先创建一个游戏的抽象类(各种游戏的爹)。

public abstract class Game {
    public abstract void gameName();
}

2、创建一些游戏,去继承这个父类,并实现父类的方法。

public class ApexGame  extends Game{
    @Override
    public void gameName() {
        System.out.println("apex英雄真好玩");
    }
}

public class DotaGame extends Game {
    @Override
    public void gameName() {
        System.out.println("我马上辉耀!");
    }
}

public class YjwjGame  extends Game{
    @Override
    public void gameName() {
        System.out.println("你敢振刀我?");
    }
}

3、创建这个模式的核心,工厂类。

他会根据请求传入值的不同,返回不一样的游戏对象。
public class GameFactory {
    public static Game factory(String type){
        Game game=null;
        switch (type){
            case "Dota":
                game=new DotaGame();
                break;
            case "Yjwj":
                game=new YjwjGame();
                break;
            case "Apex":
                game=new ApexGame();
                break;
        }
        return game;
    }
}

4、使用简单工厂模式类

public class StartGame {
    public static void main(String[] args) {
        Game game = GameFactory.factory("Dota");
        game.gameName();
        Game game2 = GameFactory.factory("Yjwj");
        game2.gameName();
        Game game3 = GameFactory.factory("Apex");
        game3.gameName();
    }
}

image.png

这个简单工厂模式的秘籍有什么缺点呢?不会是欲练此功,必先自宫吧!! 缺点当然有,但也没有这么严重。

首先第一点,它破坏了设计模式中的开闭原则(对扩展开发,对修改关闭)。在程序需要增加功能的时候,不能去修改原来的代码,而是新增代码。

还有一点嘞,游戏工厂类集中了所有游戏创建的逻辑,万一那天工厂奔溃了,那所有游戏 对象的创建都会出问题。

遇见这种问题,那前辈们当然有方法解决。下一篇文章说。

嗷了!完结撒花✿✿ヽ(°▽°)ノ✿

点赞啊,喂!