「这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战」
抽象工厂模式
这种类型的设计模式属于创建型模式,上次提到工厂方法模式存在弊端一个具体工厂只能生产一种产品,这一弊端抽象工厂模式可以解决。
抽象工厂模式与工厂方法模式最大的区别:抽象工厂中每个工厂可以创建多种类的产品;而工厂方法每个工厂只能创建一类
抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,无须指定它们具体的类,将一些相关的具体类组成一个“具体类族”,由同一个工厂来统一生产。
实现
抽象工厂类
声明一组用于创建一族产品的方法,每个方法对应一种对象,在抽象工厂中声明了多个工厂方法, 用于创建不同类型的对象。(可返回不同类型的对象)
abstract class Factory{
public abstract Product ManufacturePhone();
public abstract Product ManufactureComputer();
}
抽象产品族类
提供一组所有类都具有的业务方法。
abstract class Product{
public abstract void Show();
}
抽象产品类
实现抽象接口中所定义的业务方法(还是抽象的)
abstract class Phone extends Product {
@Override
public abstract void play();
}
abstract class Computer extends Product {
@Override
public abstract void play();
}
具体产品类
该角色继承抽象类,主要用于实现抽象类中声明的抽象方法
public class APhone extends Phone{
@Override
public void play() {
}
}
public class AComputer extends Computer {
@Override
public void play() {
}
}
public class BPhone extends Phone {
@Override
public void play() {
}
}
public class BComputer extends Computer{
@Override
public void play() {
}
}
具体工厂类
创建对象
public class FactoryA extends Factory {
@Override
public Product ManufacturePhone() {
return new APhone();
}
@Override
public Product ManufactureComputer() {
return new AComputer();
}
}
public class FactoryB extends Factory {
@Override
public Product ManufacturePhone() {
return new BPhone();
}
@Override
public Product ManufactureComputer() {
return new BComputer();
}
}
在抽象工厂模式中,每个具体工厂都提供了多个工厂方法用于创建多种不同类型的具体对象,这些被创建的对象就构成一个族。
增加新的族很方便, 无须修改已有系统, 符合“开闭原则”。