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

2021-04-05  本文已影响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、具体产品

可以理解为:

抽象工厂生产抽象产品

具体工厂生产具体产品

上一篇下一篇

猜你喜欢

热点阅读