一、抽象工厂
1. 提供一个创建产品族的接口,每个子类可以生产一系列相关的产品
2.可以在类的内部对产品族中相关联的多等级产品进行共同管理。不必专门引入多个新的类来进行管理
3.当需要产品族时,抽象工厂可以保证客户管始终只使用同一个产品的产品组
4.增强了程序的可扩展性,当增加一个新的产品族的时候,不需要修改源代码。满足开闭原则。
PS:开闭原则:对扩展开放,对修改关闭,即在不修改一个软件实体的基础上去扩展其功能。
能够降低维护带来的新风险;软件系统在拥有适应性和灵活性的同时具备较好的稳定性。
二、应用场景
抽象工厂模式是工厂方法模式的升级版,工厂方法模式只生产一个等级的产品,而抽象工厂模式可以生产多个等级的产品。系统中有多个产品族,但每次只使用其中的某一族产品。
如电器工厂中的电视机、洗衣机、空调等。如有人只喜欢穿某一个牌子的衣服鞋子等。
三、实例展示
package _001_抽象工厂;
/*
* 海尔产品
*/
abstract class Haier{
public abstract void methodA();
}
class HaierTV extends Haier{
@Override
public void methodA() {
System.out.println("海尔电视机播放中……");
}
}
class Haierair extends Haier{
@Override
public void methodA() {
System.out.println("海尔空调制冷中……");
}
}
/*
* 海信产品
*/
abstract class Haixin{
public abstract void methodB();
}
/*
* 海信电视
*/
class HaixinTV extends Haixin{
@Override
public void methodB() {
System.out.println("海信电视机播放中……");
}
}
/*
* 海信空调
*/
class Haixinair extends Haixin{
@Override
public void methodB() {
System.out.println("海信空调制冷中……");
}
}
/*
* 抽象工厂
*/
abstract class AbstractFactory{
public abstract Haier createProductA();
public abstract Haixin createProductB();
}
class AirFactory extends AbstractFactory{
@Override
public Haier createProductA() {
System.out.println("海尔工厂生产海尔空调");
return new Haierair();
}
@Override
public Haixin createProductB() {
System.out.println("海信工厂生产海信空调");
return new Haixinair();
}
}
class TVfactory extends AbstractFactory{
@Override
public Haier createProductA() {
System.out.println("海尔工厂生产海尔电视机");
return new HaierTV();
}
@Override
public Haixin createProductB() {
System.out.println("海信工厂生产海信电视机");
return new HaixinTV();
}
}
class Main_AbstractFactory {
public static void main(String[] args) {
AbstractFactory factory = new AirFactory();
Haier productA = factory.createProductA();
productA.methodA();
System.out.println("===========");
Haixin productB = factory.createProductB();
productB.methodB();
}
}
四、运行结果
代码可能有些混乱,欢迎各位大佬指正