美文网首页
设计模式(三) 工厂方法模式

设计模式(三) 工厂方法模式

作者: allever | 来源:发表于2018-02-04 10:58 被阅读5次

定义

定义一个用于创建对象的接口,让子类决定实例化那个类

UML类图

[图片上传失败...(image-72a8db-1517713140864)]

解读:

  • Product: 产品抽象类,
  • ConcreteProduct: 产品实现类
  • Creator: 工厂抽象类, 返回一个Product实例
  • ConcreteCreator: 工厂实现类, 返回一个ConcreteProduct实例

简单实现

Fruit: 作为产品抽象类

public abstract class Fruit {
    abstract void getName();
}

Banana: 作为产品实现类

public class Banana extends Fruit {
    @Override
    void getName() {
        System.out.println("I am banana");
    }
}

Apple: 作为产品实现类

public class Apple extends Fruit {
    @Override
    void getName() {
        System.out.println("I am apple");
    }
}

FruitFactory: 作为抽象工厂类

public abstract class FruitFactory  {
    abstract Fruit createFruit();
}

AppleFactory: 作为工厂实现类

public class AppleFactory extends FruitFactory {
    @Override
    Fruit createFruit() {
        return new Apple();
    }
}

BananaFactory: 作为工厂实现类

public class BananaFactory extends FruitFactory {
    @Override
    Fruit createFruit() {
        return new Banana();
    }
}

使用

在需要哪一个产品时就生产哪个

FruitFactory fruitFactory = new AppleFactory();
Fruit apple = fruitFactory.createFruit();
apple.getName();

使用反射

FruitFactory

public abstract class FruitFactory  {
    abstract <T extends Fruit> T createFruit(Class<T> className);
}

ConcreteFruitFactory: 具体工厂类

public class ConcreteFruitFactory extends FruitFactory {
    @Override
    <T extends Fruit> T createFruit(Class<T> className) {
        Fruit fruit = null;
        try {
            fruit = (Fruit)Class.forName(className.getName()).newInstance();
        }catch (Exception e){
            e.printStackTrace();
        }
        return (T)fruit;
    }
}

使用

需要哪个类对象就传入那个类的类型

       FruitFactory fruitFactory = new ConcreteFruitFactory();
       Fruit apple = fruitFactory.createFruit(Apple.class);
       apple.getName();

简单工厂方法模式

当工厂只有一个的时候, 只需将对应的工厂方法改为静态方法, 并去掉abstract关键字, 此时就变成了简单工厂模式或者静态工厂模式

public class FruitFactory  {
    static Fruit createFruit(){
        return new Apple();
    }
}

相关文章

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 设计模式-创建型模式-工厂模式(工厂三兄弟)

    设计模式-创建型模式-工厂模式(工厂三兄弟)工厂模式分为简单工厂,工厂方法,抽象工厂。 简单工厂模式 一个接口,三...

  • 设计模式的基本概念与区别

    1、设计模式有哪些? 23种设计模式总体分为三大类创建型设计模式,共5种简单工厂、工厂方法模式,抽象工厂模式,单例...

  • 3.简单工厂模式

    在设计模式中,工厂模式有三种形式:简单工厂模式、工厂方法模式、抽象工厂模式。三种形式核心的角色都是工厂类。 简单工...

  • 设计模式(分类 )

    设计模式分类: 一、设计模式分三大类: 1、创建型模式,(共五种模式):工厂方法模式、抽象工厂模式、单例模式、建造...

  • 「每天一个知识点」精讲设计模式面试专题

    前言: 设计模式的分类 设计模式分为三类 创建型设计模式与对象创建有关包括单例模式,工厂方法模式,抽象工厂模式,建...

  • 设计模式之死磕工厂方法模式(原创)

    在设计模式之工厂模式中,我们提到过工厂模式仔细区分的话分为三种,分别是简单工厂模式、工厂方法模式以及抽象工厂模式。...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • java-23种设计模式(笔记一)

    一、设计模式的分类 设计模式分为三类: 1、创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、...

  • 浅谈设计模式

    设计模式分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、...

网友评论

      本文标题:设计模式(三) 工厂方法模式

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