乐趣区

关于java: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 电视 
退出移动版