• 工厂方法模式--java代码实现


    工厂方法模式

      工厂方法模式,对简单工厂模式进行了升级。我们将水果园比作一个工厂,在简单工厂模式下,水果园是一个具体的工厂,直接用来生产各种各样的水果。那么在工厂方法模式下,水果园是一个抽象工厂,那么苹果树,香蕉树等就相当于是具体工厂,生产苹果、香蕉等水果。每有一种新的水果要生产,则需要种植生产这种水果植物,即创建生产具体水果的工厂。

    1.相关术语

    • 抽象工厂:工厂方法模式的核心,任何的工厂类需实现这个接口

    • 具体工厂:实现抽象的工厂接口,生产产品,即实例化相应的对象

    2.工厂方法模式示意图

     

      这里苹果和香蕉的都实现水果接口类中的get()方法,负责生产苹果和香蕉的具体工厂实现水果这个抽象工厂接口。在工厂方法模式下如果想要生产新的水果,即创建新的类。比如生产梨子,需要新建一个梨子类实现水果类的get()方法,创建梨子工厂实现水果工厂来生产梨子。

    3.创建Fruit接口、Apple类等

    Fruit(interface):

    //水果类
    public interface Fruit {
        public void get();
    }

    Apple类:

    //苹果类
    public class Apple implements Fruit{
        //实现并重写父类的get()方法
        public void get() {
            System.out.println("采集苹果");
        }
    }

    4.创建FruitFactory接口、AppleFactory类等

    FruitFactory(interface):

    public interface FruitFactory {
        public Fruit getFruit();
    }

    AppleFactory类:

    public class AppleFactory implements FruitFactory {
        @Override
        public Fruit getFruit() {
            return new Apple();
        }
    }

    5.生产水果

    MainClass:

    public class MainClass {
        public static void main(String[] args){
            //创建苹果工厂
            FruitFactory appleFactory = new AppleFactory();
            //通过苹果工厂生产苹果实例
            Fruit apple = appleFactory.getFruit();
            apple.get();
            
            //创建香蕉工厂
            FruitFactory bananaFactory = new BananaFactory();
            //通过香蕉工厂生产香蕉实例
            Fruit banana = bananaFactory.getFruit();
            banana.get();
            
            //新添加的梨子工厂
            FruitFactory pearFactory = new PearFactory();
            Fruit pear = pearFactory.getFruit();
            pear.get();
        }
    }

      这里用到Java面向对象的三大特性之一--多态。在新建工厂时,由FruitFactory接口指向具体的工厂(AppleFactory)。通过具体的工厂生产水果时,由Fruit接口指向具体的实例对象(Apple)。

    6.结果

    7.总结

      模式来源于生活。工厂方法模式,在简单工厂模式的基础上,对工厂类进行抽象,产生一个抽象工厂接口,将实际创建工作推迟到子类当中。在简单工厂模式下新引进的产品需要修改核心工厂,在工厂方法模式下不需要修改核心工厂,只需要新建一个类和创建该类的具体工厂,扩展性较强。

      参考B站视频https://www.bilibili.com/video/av34162848

  • 相关阅读:
    30-Transformation(HDU4578)-区间线段树(复杂)
    87-区间线段树(板子)--那个苑区的人最瘦
    86-区间线段树-模板
    1-2018-3-2小球碰撞
    85-取石子-威佐夫博弈
    83-取石子-尼姆博弈
    82-珠子染色-置换群
    2018.3.29 设计模式之单例模式详解
    2018.3.27 Mac 配置Tomcat
    2018.3.26 Linux下学习命令
  • 原文地址:https://www.cnblogs.com/peter_zhang/p/FactoryMethod.html
Copyright © 2020-2023  润新知