浅析Java设计模式——工厂模式(3)

浅析Java设计模式——工厂模式(三)

之前介绍了工厂模式的前两种:(文章链接:简单工厂模式 / 工厂方法模式)本篇介绍抽象工厂模式。

1、定义提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

2、模式结构:(和工厂方法模式一样)

(1)AbstractFactory(抽象工厂):用于声明生成抽象产品的方法,可以定义一组方法。

(2)ConcreteFactory(具体工厂):实现抽象工厂声明生成抽象产品的方法。

(3)AbstractProduct(抽象产品):为每种产品声明接口。

(4)ConcreteFactory(具体产品):实现抽象产品接口中的业务方法,定义具体工厂生产的具体产品对象。

3、案例分析(电器工厂)

(1)抽象产品类 TV

public interface TV  
{  
    public void play();  
}  

(2)具体产品类 HaierTV

public class HaierTV implements TV
{
    public void play()
    {
        System.out.println("海尔电视机播放中。。。");
    }
}

(3)具体产品类 MiTV

public class MiTV implements TV
{
    public void play()
    {
        System.out.println("小米电视机播放中。。。");
    }
}

(4)抽象产品类 AirConditioner

public  interface AirConditioner
{
    public void inUse();
}

(5)具体产品类 HaierAirConditioner

public  class HaierAirConditioner implements AirConditioner
{
    public void inUse(){
        System.out.println("海尔空调使用中。。。");
    }
}

(6)具体产品类 MiAirConditioner

public  class MiAirConditioner implements AirConditioner
{
    public void inUse(){
        System.out.println("小米空调使用中。。。");
    }
}

(7)抽象工厂类 EFactory

public interface EFactory
{
    public TV produceTV();
    public AirConditioner produceAirConditioner();
}

(8)具体工厂类 HaierFactory

public class HaierFactory implements EFactory
{
    public TV produceTV(){
        return new HaierTV();
    }
    public AirConditioner produceAirConditioner(){
        return new HaierAirConditioner();
    }
}

(9)具体工厂类 MiFactory

public class MiFactory implements EFactory
{
    public TV produceTV(){
        return new MiTV();
    }
    public AirConditioner produceAirConditioner(){
        return new MiAirConditioner();
    }
}

4、模式优缺点:

(1)优点:一个产品族中的多个对象被设计一起使用,能保证客户始终只使用同一个产品族的对象;增加新的具体工厂和产品族简单方便。

(2)缺点:具体工厂实现了抽象工厂接口,故增加新产品的特有功能不被允许。

5、模式应用:Java 中 AWT 中使用抽象工厂模式实现不同操作系统中应用外观界面的一致性。

6、三种模式的比较:

简单工厂模式:提供一个工厂用于生产所有产品,添加新产品时必须将该产品的生产逻辑写入这个唯一的工厂。

工厂方法模式:在简单工厂的基础上将工厂分解为抽象工厂和具体工厂,添加新产品时需要创建生产该产品的具体工厂,该具体工厂必须继承或实现抽象工厂。

抽象工厂模式:在工厂方法的基础上增加了产品族,抽象工厂可定义产品族的多个产品的方法,具体工厂创建产品族的所有产品。

猜你喜欢

转载自blog.csdn.net/qq_38190057/article/details/80406651