关于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电视

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理