工厂办法模式----- 创建型设计模式
定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
- 需要创建的产品模块 -- Shape、Circle、Square、Rectangle
- 工厂模块 -- ShapeFactory、CircleFactory、SquareFactory、RectangleFactory
- 调用客户端(未在图展示)
//通过Circle工厂获取 Circle 的对象,并调用它的 draw 方法 ShapeFactory cFactory = new CircleFactory(); Shape circle = cFactory.getShape(); //调用 Circle 的 draw 方法 circle.draw(); //通过Square工厂获取 Square 的对象,并调用它的 draw 方法 ShapeFactory sFactory = new SquareFactory(); Shape square = sFactory.getShape(); //调用 Square 的 draw 方法 square.draw();
好处
从类关系上来说,它可以让客户端与具体的工厂与产品解耦,从业务角度来说,它让客户端与具体的产品解耦。
适用的场景
我们需要一个产品帮我们完成一项任务,但是这个产品有可能有很多品牌(像这里的mysql,oracle),为了保持我们对产品操作的一致性,我们就可能要用到工厂方法模式。
不足
假设产品数量巨多,而且需要我们亲手去逐个实现的时候,工厂方法模式就会增加系统的复杂性