java 注册者模式_java23种设计模式-创建者模式-抽象工厂模式

一、定义

抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

二、优点及缺点

优点:

1、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点:

2、产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

三、代码实现:

水果抽象类:

/***@author: wsq

* @Date: 2020/9/18 14:38

* @Description: 水果接口*/

public interfaceFruit {public voidprintName();

}

水果的两个实现类:

public class Apple implementsFruit {

@Overridepublic voidprintName() {

System.out.println("This is apple!!!");

}

}public class Banana implementsFruit {

@Overridepublic voidprintName() {

System.out.println("This is banana!!!");

}

}

图形抽象类:

/***@author: wsq

* @Date: 2020/9/21 19:17

* @Description: 图形抽象类*/

public interfaceShape {public voidprintShape();

}

图形的两个实现类:

public class Square implementsShape{

@Overridepublic voidprintShape() {

System.out.println("This is square!!!");

}

}public class Circle implementsShape{

@Overridepublic voidprintShape() {

System.out.println("This is circle!!!");

}

}

图形和水果的抽象工厂类:

/***@author: wsq

* @Date: 2020/9/18 15:00

* @Description: 抽象工厂*/

public abstract classAbstactFactory {public abstractShape getShape(String name);public abstractFruit getFruit(String name);

}

图形和水果的工厂类:

/***@author: wsq

* @Date: 2020/9/21 19:19

* @Description: 水果的工厂*/

public class FruitFactory extendsAbstactFactory{

@OverridepublicShape getShape(String name) {return null;

}publicFruit getFruit(String name){if(name.equals("apple")){return newApple();

}if(name.equals("banana")){return newBanana();

}return null;

}

}/***@author: wsq

* @Date: 14:57

* @Description: 图形的工厂*/

public class ShapeFactory extendsAbstactFactory{publicShape getShape(String name){if(name.equals("circle")){return newCircle();

}else if(name.equals("square")){return newSquare();

}return null;

}

@OverridepublicFruit getFruit(String name) {return null;

}

}

工厂类:

/***@author: wsq

* @Date: 2020/9/21 19:20

* @Description: 工厂类*/

public classFactoryProducer {publicAbstactFactory getFactory(String name){if(name.equals("FruitFactory")){return newFruitFactory();

}else if(name.equals("shapeFactory")){return newShapeFactory();

}return null;

}

}

四、源码级别

五、总结

使用场景:

1、一组数据,一换就换一套。

2、生成不同操作系统的程序。

注意事项:产品族难扩展,产品等级易扩展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值