抽象工厂模式
一个抽象的父类定义公共接口,里面定义了一系列产品的生产规范;(多产品)
不同的子类都基于父类的实现,定义了一系列符合自己要求的生产规范,公共规范+自有规范;(多等级)
每个孙子辈的子类实现具体的生产细节。
抽象工厂模式是一系列相关或相互依赖的接口或抽象,无须指定他们具体的类。
它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构。
抽象工厂结构图:
编者按:
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();
}
}
结果:
看小米电视
小米洗衣机
--------------
看海尔电视
海尔洗衣机
关注公众号,获取更多资源。