引言:
抽象工厂方法模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。在该模式中,一个工厂接口负责创建一族产品,每个具体的工厂子类都实现了这个接口以创建特定类型的产品。
特点和组成成分:
抽象工厂模式由以下几个要素组成:
-
AbstractFactory(抽象工厂):定义了创建一组相关对象的接口,其中包括一系列抽象方法用于创建各种类型的对象。
-
ConcreteFactory(具体工厂):实现抽象工厂接口,负责创建具体的对象。
-
AbstractProduct(抽象产品):定义了一组相关对象的接口,通常包括一系列抽象方法用于描述各种类型对象的行为。
-
ConcreteProduct(具体产品):实现抽象产品接口,提供了具体对象的实现。
-
Client(客户端):通过抽象工厂接口来创建对象,而不需要知道具体工厂和产品的实现细节。
示例代码解析
这里小编以一个家电实例来简述一下产品等级结构和产品族的关系,用Haier和TCL两个品牌来说这是两个不同的产品族,而两者都生产冰箱,洗衣机,电视机,例如冰箱就是一个产品等级结构。
利用上述信息我们就可以进行代码编写。
1.抽象产品类:
package abstractfactory;
public interface Refrigerator {
public void display();
}
package abstractfactory;
public interface TV {
public void display();
}
package abstractfactory;
public interface Washer {
public void display();
}
2.具体产品类
package abstractfactory;
public class HaierRefrigerator implements Refrigerator{
@Override
public void display() {
System.out.println("海尔冰箱");
}
}
package abstractfactory;
public class HaierTV implements TV{
@Override
public void display() {
System.out.println("海尔电视");
}
}
package abstractfactory;
public class HaierWasher implements Washer{
@Override
public void display() {
System.out.println("海尔洗衣机");
}
}
package abstractfactory;
public class TCLRefrigerator implements Refrigerator{
@Override
public void display() {
System.out.println("TCL冰箱");
}
}
package abstractfactory;
public class TCLTV implements TV{
@Override
public void display() {
System.out.println("TCL电视");
}
}
package abstractfactory;
public class TCLWasher implements Washer{
@Override
public void display() {
System.out.println("TCL洗衣机");
}
}
3.抽象工厂类
package abstractfactory;
public interface HouseholdAppliance {
public Refrigerator creatRefrigerator();
public TV creatTV();
public Washer creatWasher();
}
4.具体工厂类
package abstractfactory;
public class HaierFactory implements HouseholdAppliance{
@Override
public Refrigerator creatRefrigerator() {
return new HaierRefrigerator();
}
@Override
public TV creatTV() {
return new HaierTV();
}
@Override
public Washer creatWasher() {
return new HaierWasher();
}
}
package abstractfactory;
public class TCLFactory implements HouseholdAppliance{
@Override
public Refrigerator creatRefrigerator() {
return new TCLRefrigerator();
}
@Override
public Washer creatWasher() {
return new TCLWasher();
}
@Override
public TV creatTV() {
return new TCLTV();
}
}
创建实例
实现类
package abstractfactory;
public class Client {
public static void main(String[] args) {
HouseholdAppliance factory=new HaierFactory();
TV tv=factory.creatTV();
Refrigerator rf=factory.creatRefrigerator();
Washer ws=factory.creatWasher();
tv.display();
rf.display();
ws.display();
}
}
总结
抽象工厂方法模式提供了一种灵活的方式来创建一系列相关对象,使得客户端代码可以在不需要知道具体产品类的情况下实现对这些产品的使用。通过定义抽象工厂接口和具体工厂实现类,以及产品接口和具体产品实现类,我们可以轻松地扩展和修改产品线,并且保持代码的可维护性和可扩展性。但是他体现的是开闭原则的倾斜性,事实上,抽象工厂方法仅仅对增加产品组符合开闭原则,增加产品等级结构违背了开闭原则。