设计模式系列--23种常见设计模式之抽象工厂模式(10)

抽象工厂模式

一个抽象的父类定义公共接口,里面定义了一系列产品的生产规范;(多产品)
不同的子类都基于父类的实现,定义了一系列符合自己要求的生产规范,公共规范+自有规范;(多等级)
每个孙子辈的子类实现具体的生产细节。


抽象工厂模式是一系列相关或相互依赖的接口或抽象,无须指定他们具体的类。
它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构。

抽象工厂结构图:

编者按:

1、同工厂方法比较,二者都是选择对应的工厂,由工厂生产对应的产品,目标在于工厂的选择和改变。
2、不同之处,工厂方法针对的是一类产品,而抽象工厂,层级复杂化,针对多种产品,维度多样化,可以针对同产品的不同皮牌,可以针对同品牌的不同产品。
3、抽象工厂方便按照不同维度去按需索取,客户端只需改变小的需求,即可以实现获取到不同产品的配置。


代码实现用例图:


具体代码实现:

抽象工厂类:

public interface Factory {

    Television createTv();

    Washer createWasher();
}

电视接口:

public interface Television {

    void watchTv();
}

洗衣机接口:

public interface Washer {

    void useWash();
}

海尔工厂:

public class HaiErFactory implements Factory {
    @Override
    public Television createTv() {
        return new HaiErTv();
    }

    @Override
    public Washer createWasher() {
        return new HaiErWasher();
    }
}

小米工厂:

public class XiaoMiFactory implements Factory {
    @Override
    public Television createTv() {
        return new XiaoMiTv();
    }

    @Override
    public Washer createWasher() {
        return new XiaoMiWasher();
    }
}

海尔电视机:

public class HaiErTv implements Television {
    @Override
    public void watchTv() {
        System.out.println("看海尔电视");
    }
}

海尔洗衣机:

public class HaiErWasher implements Washer {
    @Override
    public void useWash() {
        System.out.println("海尔洗衣机");
    }
}

小米电视机:

public class XiaoMiTv implements Television {
    @Override
    public void watchTv() {
        System.out.println("看小米电视");
    }
}

小米洗衣机:

public class XiaoMiWasher implements Washer {
    @Override
    public void useWash() {
        System.out.println("小米洗衣机");
    }
}

客户端引用:

public class Main {

    public static void main(String[] args) {
        Factory factory;
        Television tv;
        Washer washer;

        factory = new XiaoMiFactory();
        tv = factory.createTv();
        washer = factory.createWasher();
        tv.watchTv();
        washer.useWash();

        System.out.println("--------------");

        factory = new HaiErFactory();
        tv = factory.createTv();
        washer = factory.createWasher();
        tv.watchTv();
        washer.useWash();

    }
}

结果:

看小米电视
小米洗衣机
--------------
看海尔电视
海尔洗衣机

关注公众号,获取更多资源。

猜你喜欢

转载自blog.csdn.net/weisong530624687/article/details/109643494