形象工厂模式简介

  • 模式属于创立型模式,它提供了一种创建对象的最佳形式。
  • 形象工厂模式(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电视