工厂模式

作者: 降龙_伏虎 | 来源:发表于2019-06-19 10:31 被阅读0次

1.简单工厂模式

简单工厂模式(Smple Factory Pattern) 是指有一个工厂对象决定创建出哪一种产品的实例
适用于工厂类创建实例对象较少的情况.调用时只需传入参数即可
image.png
/**
 * Description:水果接口
 *
 * @date 2019-04-26 11:27
 */

public interface IFruits {

    /**
     * Description:获取水果名称
     * @Date  2019-04-26 11:28
     * @Param []
     * @return java.lang.String
    **/

    String getName();
}

/**
 * Description:苹果类
 *
 * @date 2019-04-26 11:29
 */

public class Apple implements IFruits{
    public String getName() {
        return "苹果";
    }
}

/**
 * Description:水果工厂
 *
 * @date 2019-04-26 11:30
 */

public class FruitsFactory {

    public static IFruits produce(Class type){
        IFruits fruits = null;
        try {
            fruits = (IFruits) Class.forName(type.getName()).newInstance();
        } catch (InstantiationException e) {
            System.out.println("抽象类或接口");
        } catch (IllegalAccessException e) {
            System.out.println("私有对象");
        } catch (ClassNotFoundException e) {
            System.out.println("类不存在");
        }
        return fruits;
    }

    //测试
    public static void main(String[] args) {
        IFruits fruits = FruitsFactory.produce(com.sky.designpattern.simplefactory.Apple.class);
        System.out.println(fruits == null?"":fruits.getName());
    }
}

2.工厂方法模式

工厂方法模式(Factory Method Pattern) 是指定一个创建对象的接口
但实际上对象的创建过程由接口的实现类负责,将类的实例化推迟到实现类中
image.png
/**
 * Description:水果接口
 *
 * @date 2019-04-26 11:27
 */

public interface IFruits {

    /**
     * Description:获取水果名称
     * @Date  2019-04-26 11:28
     * @Param []
     * @return java.lang.String
    **/

    String getName();
}

/**
 * Description:苹果类
 *
 * @date 2019-04-26 11:29
 */

public class Apple implements IFruits{
    public String getName() {
        return "苹果";
    }
}

/**
 * Description:香蕉类
 *
 * @date 2019-04-26 11:29
 */

public class Banana implements IFruits{
    public String getName() {
        return "香蕉";
    }
}

/**
 * Description:水果工厂接口
 *
 * @date 2019-04-26 11:30
 */

public interface IFruitsFactory {

      IFruits produce();
}

/**
 * Description:苹果工厂
 *
 * @date 2019-04-26 11:48
 */
public class AppleFactory implements IFruitsFactory {
    @Override
    public IFruits produce() {
        return new Apple();
    }
}


/**
 * Description:香蕉工厂
 *
 * @date 2019-04-26 11:48
 */

public class BananaFactory implements IFruitsFactory {
    @Override
    public IFruits produce() {
        return new Banana();
    }
}

实际使用中工厂可采用spring注入,返回结果可采用泛型

/**
 * Description:水果工厂接口
 *
 * @date 2019-04-26 11:30
 */

public interface IFruitsFactory<T extends IFruits> {

      T produce();
}
/**
 * Description:苹果工厂
 *
 * @date 2019-04-26 11:48
 */
public class AppleFactory implements IFruitsFactory {
    @Override
    public Apple produce() {
        return new Apple();
    }
}
/**
 * Description:香蕉工厂
 *
 * @date 2019-04-26 11:48
 */

public class BananaFactory implements IFruitsFactory {
    @Override
    public Banana produce() {
        return new Banana();
    }
}

3.抽象工厂模式

image.png
/**
 * Description:水果接口
 *
 * @date 2019-04-26 14:21
 */

public interface IFruits {

    String getName();
    String getBrand();
}

/**
 * Description:红富士苹果类
 *
 * @date 2019-04-26 14:23
 */

public class HongFushiApple implements IFruits{
    @Override
    public String getName() {
        return "苹果";
    }

    @Override
    public String getBrand() {
        return "红富士";
    }
}
/**
 * Description:红富士香蕉类
 *
 * @date 2019-04-26 14:23
 */

public class HongFushiBanana implements IFruits{
    @Override
    public String getName() {
        return "香蕉";
    }

    @Override
    public String getBrand() {
        return "红富士";
    }
}

/**
 * Description:黄元帅苹果类
 *
 * @date 2019-04-26 14:23
 */

public class HuangYuanShuaiApple implements IFruits{
    @Override
    public String getName() {
        return "苹果";
    }

    @Override
    public String getBrand() {
        return "黄元帅";
    }
}

/**
 * Description:黄元帅香蕉类
 *
 * @date 2019-04-26 14:23
 */

public class HuangYuanShuaiBanana implements IFruits{
    @Override
    public String getName() {
        return "香蕉";
    }

    @Override
    public String getBrand() {
        return "黄元帅";
    }
}

/**
 * Description:红富士水果工厂
 *
 * @date 2019-04-26 14:16
 */

public class HongFuShiFactory implements IFruitsFactory {
    @Override
    public IFruits produceApple() {
        return new HongFushiApple();
    }

    @Override
    public IFruits produceBanana() {
        return new HuangYuanShuaiBanana();
    }
}

/**
 * Description:黄元帅水果工厂
 *
 * @date 2019-04-26 14:16
 */

public class HuangYuanShuaiFactory implements IFruitsFactory {
    @Override
    public IFruits produceApple() {
        return new HuangYuanShuaiApple();
    }

    @Override
    public IFruits produceBanana() {
        return new HongFushiBanana();
    }
}

相关文章

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 工厂模式

    工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式...

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

    找女朋友之简单工厂模式,工厂模式,抽象工厂模式 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

  • 【设计模式】- 工厂模式

    工厂模式分为三种:简单工厂模式、工厂方法模式和抽象工厂模式。 工厂模式:靠工厂生产对象 简单工厂模式中只有一个工厂...

  • 工厂模式

    工厂模式包含三种模式:简单工厂模式、工厂方法模式和抽象工厂模式。 简单工厂模式 定义简单工厂模式:由一个工厂类根据...

  • Java设计模式——工厂模式

    工厂模式简单工厂模式工厂方法模式抽象工厂模式 1.简单工厂模式 1.基本介绍1)简单工厂模式也叫静态工厂模式,是属...

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

  • 设计模式-工厂模式

    工厂模式概念 实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂模式...

  • 第一章2.0工厂- 基础类准备

    2.1工厂-简单工厂模式2.2工厂-工厂方法模式2.3工厂-抽象工厂模式

网友评论

    本文标题:工厂模式

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