java抽象工厂设计模式_Java设计模式系列-抽象工厂模式

本文介绍了抽象工厂模式与工厂方法模式的区别,通过家具制造的例子展示了抽象工厂如何处理产品组合。在抽象工厂模式中,面对的是一组相关的产品组合,如桌椅套装,而工厂方法模式主要针对单一产品类型。当产品组合增加时,只需新增工厂实现,遵循开闭原则。但若增加新的产品类型,可能需要修改原有工厂接口。
摘要由CSDN通过智能技术生成

一、概述

抽象工厂模式是对工厂方法模式的再升级,但是二者面对的场景稍显差别。

工厂方法模式面对的目标一般都是单类的,就比如《Java设计模式系列-工厂方法模式》中所举的例子,目标就是桌子这一类商品。

如果是这样的呢:生产的是桌椅组合,目标的一套商品,每一套商品中的每类商品的种类的不同的,不同的组合形成不同的套装。

这种情况下,就需要使用抽象工厂模式

二、实例

我们还以家具为例:

桌子接口:Desk

/**

* 桌子接口

*/

public interface Desk {

String getType();

}

木质桌子:WoodenDesk

/**

* 木质桌子

*/

public class WoodenDesk implements Desk {

private String type = "木质桌";

@Override

public String getType() {

return type;

}

}

塑料桌子:PlasticDesk

/**

* 塑料桌

*/

public class PlasticDesk implements Desk {

private String type = "塑料桌";

@Override

public String getType() {

return type;

}

}

椅子接口:Chair

/**

* 椅子接口

*/

public interface Chair {

String getType();

}

木质椅子:WoodenChair

/**

* 木质椅

*/

public class WoodenChair implements Chair {

private String type = "木质椅";

@Override

public String getType() {

return type;

}

}

塑料椅:PlasticChair

/**

* 塑料椅

*/

public class PlasticChair implements Chair {

private String type = "塑料椅";

@Override

public String getType() {

return type;

}

}

家具工厂接口:FurnitureFactory

/**

* 家具工厂

*/

public interface FurnitureFactory {

Desk createDesk();

Chair createChair();

}

木质家具工厂:WoodenFurnitureFactory

/**

* 木质家具工厂

*/

public class WoodenFurnitureFactory implements FurnitureFactory {

@Override

public Desk createDesk() {

return new WoodenDesk();

}

@Override

public Chair createChair() {

return new WoodenChair();

}

}

塑料家具工厂:PlasticFurnitureFactory

/**

* 塑料家具工厂

*/

public class PlasticFurnitureFactory implements FurnitureFactory {

@Override

public Desk createDesk() {

return new PlasticDesk();

}

@Override

public Chair createChair() {

return new PlasticChair();

}

}

测试类:Clienter

/**

* 测试类

*/

public class Clienter {

public static void main(String[] args) {

FurnitureFactory factory = new PlasticFurnitureFactory();

Desk desk = factory.createDesk();

Chair chair = factory.createChair();

System.out.println(desk.getType());

System.out.println(chair.getType());

}

}

执行结果:

塑料桌

塑料椅

三、解析

通过上面的例子,对比《Java设计模式系列-工厂方法模式》中工厂方法模式的例子,可以看出二者场景的不同之处,抽象工厂模式面对的是一个组合体,如果将这一点排除的话,其他方面看起来,二者还是相似的。

这里在目标每添加一种组合时,就需要新建一个工厂实现来对应,这一点满足开闭原则,不会修改已有类。

但是有一种情况,会导致修改原有类,那就是当目标需要在家具中新增一种家具类型的时候,比如例子中,家具组合中只包含桌子和椅子,如果再添加一种书柜,那么所有的工厂包括工厂接口都面临修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值