不是吧!不是吧!你不会是看了好多文章都没看懂简单工厂设计模式吧!是不是被一段段专业名词整懵了。来吧!我们试着用简单的方式来了解简单工厂模式。
首先,我们来说说什么是设计模式,专业的介绍呢,这里建议打开百度。
我说说我对设计模式的理解吧。设计模式可以理解为一本经验书,一本让你升级的经验书。这本经验书的由来是前辈们在开发的过程中发现了很多问题。
前辈:咦!这段代码怎么创建了这么多对象呀。不符合我大侠的身份。可恶,我要对它进行改造。
前辈:哇,我太牛了,这问题都能解决了。我必须让这个经验包传下去。*
于是就有了设计模式。设计模式类就是一本前辈们留下的经验包,当然要深入了解,吸收,然后让它变成自己的九阳神功。
设计模式中一共有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();
}
}
这个简单工厂模式的秘籍有什么缺点呢?不会是欲练此功,必先自宫吧!! 缺点当然有,但也没有这么严重。
首先第一点,它破坏了设计模式中的开闭原则(对扩展开发,对修改关闭)。在程序需要增加功能的时候,不能去修改原来的代码,而是新增代码。
还有一点嘞,游戏工厂类集中了所有游戏创建的逻辑,万一那天工厂奔溃了,那所有游戏 对象的创建都会出问题。
遇见这种问题,那前辈们当然有方法解决。下一篇文章说。
嗷了!完结撒花✿✿ヽ(°▽°)ノ✿
点赞啊,喂!