JAVA -- 工厂模式之 抽象工厂模式

这篇博客介绍了如何在Java中使用抽象工厂模式来扩展工厂方法,以应对产品线的扩展。通过实例展示了如何创建鸿星尔克和贵人鸟品牌的鞋子和衣服,强调了工厂模式在实例化对象时的角色,以及它如何简化代码并提高代码的可维护性和扩展性。
摘要由CSDN通过智能技术生成

        定义:

        在spring和其他的框架中,工厂模式被大量使用,实际上工厂模式就是帮助我们实例化对象的设计模式,因为在实际的项目中,实例化对象的同时,可能对象中有大量的初始化工作,如果每次项目有个地方用到这个实例化,后面都要加上一堆的初始化参数,变量等操作,那就太繁琐了并且后续维护难度大,我们可以把这个动作交给工厂,我们只需要调用工厂给我们提供的方法,就可以获取到初始化完成的对象。

        场景:

        一个客户到想网上购买一双鞋,考虑两个体育品牌,鸿星尔克和贵人鸟。

        同时客户除了鞋子又想再买一件运动服

        抽象工厂模式:

        此博客是基于工厂方法模式的扩展,在原来的基础上,大工厂添加生产衣服方法,具体工厂去实现:

JAVA -- 工厂模式之 工厂方法模式_DGH2430284817的博客-CSDN博客

 

         鞋产品接口:

public interface Shoes {

    /*
     * @description: 买鞋
     */
    public void buyShoes();
}

        鸿星尔克鞋产品:

/*
 * @description: 鸿星尔克
 */
public class ERKE implements Shoes {

    @Override
    public void buyShoes() {
        System.out.println("买一双鸿星尔克鞋");
    }
}

        贵人鸟鞋产品:

/*
 * @description: 贵人鸟
 */
public class GRN implements Shoes {

    @Override
    public void buyShoes() {
        System.out.println("买一双贵人鸟鞋");
    }
}

         衣服产品接口:

public interface Clothes {

    /*
     * @description: 展示衣服信息
     */
    public void showClothes();
}

        鸿星尔克衣服产品:

/*
 * @description: 鸿星尔克衣服
 */
public class ERKE_Clothes implements Clothes {

    @Override
    public void showClothes() {
        System.out.println("一件鸿星尔克衣服");
    }
}

        贵人鸟衣服产品:

/*
 * @description: 贵人鸟衣服
 */
public class GRN_Clothes implements Clothes {

    @Override
    public void showClothes() {
        System.out.println("一件贵人鸟衣服");
    }
}

       

        体育品牌工厂类

public interface SportsFactory {
    /*
     * @description: 生产鞋
     * @return:  对应品牌店生产的鞋产品对象
     */
    public Shoes makeShoes() ;

    /*
     * @description: 生产衣服
     * @return:  对应品牌店生产的衣服产品对象
     */
    public Clothes makeClothes() ;

}

        鸿星尔克工厂类:

public class ERKEFactory implements SportsFactory {
    @Override
    public Shoes makeShoes() {
        //初始化店员,灯光,空调,镜子等等等等
        return new ERKE_Shoes();
    }

    @Override
    public Clothes makeClothes() {
        //初始化衣服尺寸,衣服款式,颜色等等
        return new ERKE_Clothes();
    }
}

        贵人鸟 工厂类:

public class GRNFactory implements SportsFactory {
    @Override
    public Shoes makeShoes() {
        //初始化店员,灯光,空调,镜子等等等等
        return new GRN_Shoes();
    }

    @Override
    public Clothes makeClothes() {
        //初始化衣服尺寸,衣服款式,颜色等等
        return new GRN_Clothes();
    }
}

        测试类:

public class mainTest {
    public static void main(String[] args) {
        //客户买鞋,买衣服
        //客户想买鸿星尔克的鞋,创建鸿星尔克品牌工厂
        SportsFactory sportsFactory = new ERKEFactory();
        //鸿星尔克品牌工厂中创建鸿星尔克鞋产品对象
        Shoes shoes = sportsFactory.makeShoes();
        //鸿星尔克品牌工厂中创建鸿星尔克衣服产品对象
        Clothes clothes = sportsFactory.makeClothes();
        //鞋信息
        shoes.showShoes();
        //衣服信息
        clothes.showClothes();

        //客户想买贵人鸟的鞋,创建贵人鸟品牌工厂
        SportsFactory sportsFactory2 = new GRNFactory();
        //贵人鸟品牌工厂中创建贵人鸟鞋产品对象
        Shoes shoes2 = sportsFactory2.makeShoes();
        //鸿星尔克品牌工厂中创建贵人鸟衣服产品对象
        Clothes clothes2 = sportsFactory2.makeClothes();
        //鞋信息
        shoes2.showShoes();
        //衣服信息
        clothes2.showClothes();
    }
}

        效果:

总结:

        简单工厂,是把产品对象实例化中初始化的操作给工厂,把这一块代码抽象出来,以后初始化有改动,就只需要改工厂对应方法即可

        工厂方法模式,对比简单工厂,简单工厂是把所有产品实例都交给一个大工厂,而工厂方法模式把这个操作细分给了具体的平台工厂,大工厂只提供抽象接口,具体实例化初始化由各自品牌工厂完成

        抽象工厂模式, 是工厂方法模式的扩展,因为工厂方法模式是针对一种产品的,在迭代开发过程中,工厂可能需要扩充其他产品的功能,所以有了抽象工厂模式。当以后再有新产品入网球拍啥的,就可以在大工厂中定义新的接口方法,然后具体的工厂中去实现,新产品对应代码也加一套,修改量较小,并且不会影响到原来的产品代码,扩展性较强

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值