抽象工厂模式(Abstract Factory Pattern)-23种常用设计模式快速入门教程
1.抽象工厂模式定义
是一种创建型设计模式,它定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。
2.抽象工厂模式优点
在工厂方法模式中,工厂方法用来处理对象的创建,它的优点在于使用工厂方法将对象的创建和对象的使用分离。
3.抽象工厂模式缺点
类的数量增加,增加了系统的复杂度。
4.抽象工厂模式示例代码
传统设计模式讲解时使用的示例代码,大都采用与读者日常生活接解的业务系统没有多大关联关系。以致大部分读者无法做到学以致用,学完就忘记。本文采用使用日常生活中随处可见的优惠券及活动业务来编写实现代码:
/**
* 抽象工厂类
*/
public abstract class AbstractCouponFactory {
/**
* 创建优惠券
*/
public abstract Coupon createCoupon();
/**
* 创建活动
*/
public abstract Promotion createPromotion();
}
/**
* 优惠券类
*/
public abstract class Coupon {
public abstract void useCoupon();
}
/**
* 新用户优惠券
*/
public class NewUserCoupon extends Coupon {
public void useCoupon() {
System.out.println("使用新用户优惠券");
}
}
/**
* 活动类
*/
public abstract class Promotion {
public abstract void startPromotion();
}
/**
* 双十一活动
*/
public class DoubleElevenPromotion extends Promotion {
public void startPromotion() {
System.out.println("开始双十一活动");
}
}
/**
* 母婴类优惠券工厂
*/
public class MotherAndBabyCouponFactory extends AbstractCouponFactory {
public Coupon createCoupon() {
return new NewUserCoupon();
}
public Promotion createPromotion() {
return new DoubleElevenPromotion();
}
}
/**
* 客户端代码
*/
public class Client {
public static void main(String[] args) {
AbstractCouponFactory factory = new MotherAndBabyCouponFactory();
Coupon coupon = factory.createCoupon();
Promotion promotion = factory.createPromotion();
coupon.useCoupon();
promotion.startPromotion();
}
}
在这个示例中,我们定义了抽象工厂类 AbstractCouponFactory
,其中包含了创建优惠券和活动的抽象方法 createCoupon()
和 createPromotion()
。然后,我们定义了具体的优惠券类 Coupon
和活动类 Promotion
,并实现了它们的具体行为。在 MotherAndBabyCouponFactory
工厂类中,我们实现了 createCoupon()
和 createPromotion()
方法,分别返回了 NewUserCoupon
类型的优惠券和 DoubleElevenPromotion
类型的活动。在客户端代码中,我们通过 MotherAndBabyCouponFactory
工厂类创建了优惠券和活动,并调用它们的方法进行使用和启动。 这个示例中,我们通过抽象工厂模式实现了优惠券和活动的创建,使得客户端代码与具体实现解耦,更加灵活。