工厂方法模式

结构

  • 抽象工厂
  • 具体工厂
  • 抽象产品
  • 具体产品

工厂方法模式

Demo

抽象工厂
public interface FoodFactory {
    Food produceFood();
}
具体工厂

具体工厂用来实现抽象工厂, 并且实现其方法, 获取抽象产品

public class BreadFoodFactory implements FoodFactory {
    @Override
    public Food produceFood() {
        return new BreadFood();
    }
}
public class MilkFoodFactory implements FoodFactory {
    @Override
    public Food produceFood() {
        return new MilkFood();
    }
}
抽象产品
public abstract class Food {
    abstract void foodName();
}
具体产品

实现抽象产品和抽象方法

public class BreadFood extends Food {
    @Override
    void foodName() {
        System.out.println("这是面包");
    }
}
public class MilkFood extends Food {
    @Override
    void foodName() {
        System.out.println("这是牛奶");
    }
}
Test

通过多态构建不同的工厂, 然后通过不同工厂制造不用的产品.

public class FactoryMethodTest {

    public static void main(String[] args) {

        FoodFactory milkFoodFactory = new MilkFoodFactory();
        Food food = milkFoodFactory.produceFood();
        food.foodName();

        FoodFactory breadFoodFactory = new BreadFoodFactory();
        Food food1 = breadFoodFactory.produceFood();
        food1.foodName();
    }
}

总结

  • 所有扩展只需要实现工厂和抽象产品即可

   版权声明

文章作者: liuzhihang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源!

 上一篇
抽象工厂模式 抽象工厂模式
工厂的工厂, 在工厂的基础上进行抽象, 用来获取工厂, 然后通过工厂获取一类产品 和工厂方法的主要区别是: 工厂方法每次获取的是单个产品的工厂, 而抽象工厂则是一类产品
2018-11-25
下一篇 
基于LinkHashMap的LRU缓存淘汰 基于LinkHashMap的LRU缓存淘汰
LRU缓存淘汰是redis中的一种淘汰策略, 当内存大小不足以存放数据时, 此时存入新数据, 将删除较早存入的数据.
2018-11-19