工厂方法模式

Posted sakura1027

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂方法模式相关的知识,希望对你有一定的参考价值。

工厂方法模式定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行

类图:

技术分享图片

1 package pattern;
2 
3 public interface Shape {
4     void draw();
5 }
1 package pattern;
2 
3 public class Rectangle implements Shape{
4     @Override
5     public void draw() {
6         System.out.println("draw rectangle");
7     }
8 }
1 package pattern;
2 
3 public class Square implements Shape {
4     @Override
5     public void draw() {
6         System.out.println("draw square");
7     }
8 }
1 package pattern;
2 
3 public class Circle implements Shape {
4     @Override
5     public void draw() {
6         System.out.println("draw circle");
7     }
8 }
 1 package pattern;
 2 
 3 public class ShapeFactory {
 4     public Shape getShape(String shape) {
 5         if ("circle".equals(shape)) {
 6             return new Circle();
 7         } else if ("rectangle".equals(shape)) {
 8             return new Rectangle();
 9         } else if ("square".equals(shape)) {
10             return new Square();
11         }
12         return null;
13     }
14 }
 1 package pattern;
 2 
 3 public class FactoryPatternDemo {
 4     public static void main(String[] args) {
 5         ShapeFactory shapeFactory = new ShapeFactory();
 6 
 7         Shape shape1 = shapeFactory.getShape("circle");
 8         shape1.draw();
 9 
10         Shape shape2 = shapeFactory.getShape("rectangle");
11         shape2.draw();
12 
13         Shape shape3 = shapeFactory.getShape("square");
14         shape3.draw();
15     }
16 }
17 /*
18 draw circle
19 draw rectangle
20 draw square
21  */

工厂方法模式的好处:

1. 一个调用者想创建一个对象,只要知道其名称就可以了

2. 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以

3. 屏蔽产品的具体实现,调用者只关心产品的接口

 

以上是关于工厂方法模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式-简单工厂工厂方法模式抽象工厂模式详解

工厂方法模式

设计模式-工厂方法模式(Go实现)

C++工厂模式(简单工厂工厂方法抽象工厂)

C++工厂模式(简单工厂工厂方法抽象工厂)

设计模式---工厂模式