抽象工厂模式

作者: SheHuan | 来源:发表于2017-04-07 14:47 被阅读109次

    之前我们对工厂方法模式已经有所了解了,那抽象工厂模式又是什么呢?

    定义

    为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定它们的具体类。

    使用场景

    如果一个或多个对象有相同的约束时,可以使用抽象工厂模式。那什么是有相同约束的对象呢?
    举个栗子,同样是iPhone的处理器,但是可能是由三星或者台积电分别代工生产的,如果用代码模拟这个场景就可以考虑用抽象工厂模式。再比如不同型号的iPhone处理器有着不同的工艺制程,我们也可以用抽象工厂模式来模拟不同型号处理器的生产过程。

    实现

    抽象工厂模式一般由四大模块组成:

    • 抽象产品类:每种产品要实现的统一接口
    • 具体的产品类:要创建的具体产品
    • 抽象工厂类:声明若干创建产品(对象)的方法
    • 具体的工厂类:创建具体的产品

    接下来我们用抽象工厂模式来模拟上述第一个例子。
    首先创建一个抽象产品类:

    public interface Processor {
        void processor();
    }
    

    因为由三星和台积电共同代工,则具体的产品类应该有两个,代表是三星生产的还是台积电生产的:

    public class SamsungProcessor implements Processor{
        @Override
        public void processor() {
            Log.e("SamsungProcessor", "三星代工的处理器");
        }
    }
    
    public class TSMCProcessor implements Processor{
        @Override
        public void processor() {
            Log.e("TSMCProcessor", "台积电代工的处理器");
        }
    }
    

    产品有了,就可以着手建厂了,创建一个抽象工厂类:

    public abstract class ProcessorFactory {
        public abstract Processor createProcessor();
    }
    

    接下来创建两个具体的工厂类:三星和台积电的工厂

    public class SamsungProcessorFactory extends ProcessorFactory{
        @Override
        public Processor createProcessor() {
            return new SamsungProcessor();
        }
    }
    
    
    public class TSMCProcessorFactory extends ProcessorFactory {
        @Override
        public Processor createProcessor() {
            return new TSMCProcessor();
        }
    }
    

    到这里我们提到的四大模块就都有了,做个测试吧:

    public class Client {
        public static void test() {
            //生产三星代工的处理器
            SamsungProcessorFactory samsungProcessorFactory = new SamsungProcessorFactory();
            samsungProcessorFactory.createProcessor().processor();
    
            //生产台积电代工的处理器
            TSMCProcessorFactory tsmcProcessorFactory = new TSMCProcessorFactory();
            tsmcProcessorFactory.createProcessor().processor();
        }
    }
    

    这是最终的log:


    result

    如果手机的屏幕、镜头模组、内存等部件也分别由不同的厂商供应,对应到代码中就需要增加相应的工厂类和产品类,这样就导致类文件数量激增,对项目而言并不是一件好事,所以在实际开发中还是要权衡利弊。

    对比工厂方法模式,核心的四大模块都是一样的,但是构造的过程却是不同的,在工厂方法模式中,只有一个具体的工厂,而在抽象工厂模式中可能会有多个具体的工厂,因为相同或类似的产品我们可以找多个工厂帮我们生产。

    相关文章

      网友评论

        本文标题:抽象工厂模式

        本文链接:https://www.haomeiwen.com/subject/uyncattx.html