android 设计框架Android知识Android技术知识

抽象工厂模式

2017-04-07  本文已影响109人  SheHuan

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

定义

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

使用场景

如果一个或多个对象有相同的约束时,可以使用抽象工厂模式。那什么是有相同约束的对象呢?
举个栗子,同样是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

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

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

上一篇下一篇

猜你喜欢

热点阅读