美文网首页
通过《西游记》学习设计模式--工厂方法

通过《西游记》学习设计模式--工厂方法

作者: 程序员阿牛 | 来源:发表于2021-04-05 13:29 被阅读0次

    是不是在面试等一些场景时,会被问到涉及模式呢?让你详细讲的时候,你却不知怎么描述,因为这里面涉及23种涉及模式,靠死记硬背当时是记得很清楚,但是时间一久就忘得差不多了,今天让我用故事的方式给你理一下设计模式吧。

    首先,你没猜错,我们讲的是工厂方法。我们用《西游记》孙悟空借兵器的故事来阐述工厂方法设计模式。

    开始故事:

    美猴王学成本领归来,唯独缺少一件兵器,这时候牛魔王告诉孙悟空东海龙王有很多上好的兵器,可以去东海龙宫讨一件趁手的兵器。

    孙悟空其实并不确定什么样的兵器适合自己,向东海龙王索要趁手的兵器,于是前后试了大刀、双锤、九股钢叉等兵器,结果都不满意,最后东海龙王无奈,祭出大杀器--如意金箍棒,并讲述这是当年大禹治水留下的神铁,最终孙悟空最终得到了满意的武器。

    1、故事中的角色

    接下来我们开始梳理一下整个故事中,涉及到和工厂方法相关的组件:

    东海龙王------兵器工厂(负责提供兵器)

    孙悟空 ----------获得金箍棒的具体工厂

    如意金箍棒----具体的产品(兵器的一种)

    三者之间的关系图如下:

    2、抽象化分析方法

    东海龙王拥有大量的兵器

    不同的人有不同的兵器最为趁手

    如意金箍棒是龙王压轴的兵器

    孙悟空最趁手的就是如意金箍棒

    抽象化后的关系图如下图

    3、工厂方法的静态建模

    在上图中,涉及到了几个内容:

    东海龙王---抽象工厂(IWeaponFactory)

    各类兵器---抽象产品(AbstractWeapon)

    孙悟空----具体工厂(WukongFactory)

    金箍棒----具体产品(Jingubang)

    4、故事情节的工厂方法的模拟实现

    /**

    * 兵器抽象工厂

    */

    public interface IWeaponFactory {

        AbstractWeapon getWeapon();

    }

    /**

    * 抽象产品

    */

    @Data

    public abstract class AbstractWeapon {

        /**

        * 兵器名称

        */

        private String name;

        public  AbstractWeapon(){

        }

    }

    /**

    * 具体产品--金箍棒

    */

    public class Jingubang extends AbstractWeapon {

        public Jingubang(){

            this.setName("如意金箍棒");

        }

    }

    /**

    * 悟空工厂,具体的工厂

    */

    public class WukongFactory implements IWeaponFactory {

        @Override

        public AbstractWeapon getWeapon() {

            return new Jingubang();

        }

    }

    /**

    *验证趁手的兵器是什么

    */

    public class App

    {

        public static void main( String[] args)

        {

            IWeaponFactory factory =new WukongFactory();

            AbstractWeapon weapon = factory.getWeapon();

            System.out.println("孙悟空获得的趁手兵器是:"+weapon.getName());

        }

    }



    如果悟空工厂暂时无法工作了,这时候八戒工厂开着,八戒工厂里产九齿钉耙,如下:

    /**

    * 具体产品--九齿钉耙

    */

    public class Jiuchidingpa extends AbstractWeapon {

        public Jiuchidingpa(){

            this.setName("九齿钉耙");

        }

    }

    /**

    * 八戒工厂,具体的工厂

    */

    public class BajieFactory implements IWeaponFactory {

        @Override

        public AbstractWeapon getWeapon() {

            return new Jiuchidingpa();

        }

    }

    这时候孙悟空去的话,过程如下:

    public class App

    {

        public static void main( String[] args)

        {

            //IWeaponFactory factory =new WukongFactory();

            IWeaponFactory factory =new BajieFactory();

            AbstractWeapon weapon = factory.getWeapon();

            System.out.println("孙悟空获得的趁手兵器是:"+weapon.getName());

        }

    }

    结果是:

    总结:

    在工厂方法中,存在这样几种角色

    1、抽象工厂

    2、抽象产品

    3、具体工厂

    4、具体产品

    可以理解为:

    抽象工厂生产抽象产品

    具体工厂生产具体产品

    相关文章

      网友评论

          本文标题:通过《西游记》学习设计模式--工厂方法

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