Java中的抽象工厂模式

抽象工厂模式简介

  • 模式属于创建型模式,它提供了一种创建对象的最佳方式。
  • 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
  • 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
接口IComputerProduct
//电脑产品接口 public interface IComputerProduct { void start(); void shutdown(); }

子类AComputer和BComputer
//A电脑 public class AComputer implements IComputerProduct { @Override public void start() { System.out.println("开启A电脑"); }@Override public void shutdown() { System.out.println("关闭A电脑"); } }//B电脑 public class BComputer implements IComputerProduct { @Override public void start() { System.out.println("开启B电脑"); }@Override public void shutdown() { System.out.println("关闭B电脑"); } }

接口ITVProduct
//电视机产品接口 public interface ITVProduct { void start(); void shutdown(); }

子类ATV和BTV
//A电视 public class ATV implements ITVProduct { @Override public void start() { System.out.println("开启A电视"); }@Override public void shutdown() { System.out.println("关闭A电视"); } }//B电视 public class BTV implements ITVProduct { @Override public void start() { System.out.println("开启B电视"); }@Override public void shutdown() { System.out.println("关闭B电视"); } }

接口IProductFactory
//抽象产品工厂 public interface IProductFactory { //生产电脑 IComputerProduct iComputerProduct(); //生产电视 ITVProduct itvProduct(); }

子类AFactory和BFactory
public class AFactory implements IProductFactory { @Override public IComputerProduct iComputerProduct() { return new AComputer(); }@Override public ITVProduct itvProduct() { return new ATV(); } }public class BFactory implements IProductFactory { @Override public IComputerProduct iComputerProduct() { return new BComputer(); }@Override public ITVProduct itvProduct() { return new BTV(); } }

测试类
public class Test { public static void main(String[] args) { AFactory aFactory = new AFactory(); //A工厂 IComputerProduct iComputerProduct = aFactory.iComputerProduct(); //A工厂电脑产品 iComputerProduct.start(); iComputerProduct.shutdown(); ITVProduct itvProduct = aFactory.itvProduct(); //A工厂电视产品 itvProduct.start(); itvProduct.shutdown(); BFactory bFactory = new BFactory(); //B工厂 iComputerProduct = bFactory.iComputerProduct(); //B工厂电脑产品 iComputerProduct.start(); iComputerProduct.shutdown(); itvProduct = bFactory.itvProduct(); //B工厂电视产品 itvProduct.start(); itvProduct.shutdown(); /** * 输出结果: * 开启A电脑 * 关闭A电脑 * 开启A电视 * 关闭A电视 * 开启B电脑 * 关闭B电脑 * 开启B电视 * 关闭B电视 */ } }

测试结果
开启A电脑 关闭A电脑 开启A电视 关闭A电视 开启B电脑 关闭B电脑 开启B电视 关闭B电视

    推荐阅读