简单示例实现抽象工厂模式

本文详细介绍了抽象工厂模式,包括其构成要素(抽象工厂、具体工厂、抽象产品和具体产品),并通过家电产品实例展示了如何运用。模式强调了灵活性和代码可维护性,但指出在扩展产品线时需注意遵循开闭原则的局限性。
摘要由CSDN通过智能技术生成

引言:

抽象工厂方法模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。在该模式中,一个工厂接口负责创建一族产品,每个具体的工厂子类都实现了这个接口以创建特定类型的产品。

特点和组成成分:

抽象工厂模式由以下几个要素组成:

  • 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();
    }
}

总结

抽象工厂方法模式提供了一种灵活的方式来创建一系列相关对象,使得客户端代码可以在不需要知道具体产品类的情况下实现对这些产品的使用。通过定义抽象工厂接口和具体工厂实现类,以及产品接口和具体产品实现类,我们可以轻松地扩展和修改产品线,并且保持代码的可维护性和可扩展性。但是他体现的是开闭原则的倾斜性,事实上,抽象工厂方法仅仅对增加产品组符合开闭原则,增加产品等级结构违背了开闭原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzy_3366

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值