重学设计模式---之工厂方法

100 阅读2分钟

工厂方法设计模式

工厂方法:

定义

  1. 定义一个创建对象的接口但让实现这个接口的类来决定实例化那个类 但工厂方法让类的实例化推迟到子类中进行
  2. 类型 创建型

适用场景

1、创建对象需要大量重复的代码 2、客户端应用层 不依赖于产品类实例如何被创建 实现等细节 3、一个类通过其子类来指定创建那个对象

优点

1.用户只需要关心所需产品对应的工厂 无须关心创建细节 2.加入新的产品符合开闭原则 提高可扩展性

缺点:

1.类的个数容易过多 增加复杂度 2. 增加了系统的抽象性和理解难度

代码如下

1.基于第一章 简单工厂设计 重改VideoFactory 里面代码

package com.zw.design.pattern.creational.factorymethod;

/****
 * 简单工厂
 */
public abstract class VideoFactory {

    public abstract  Video getVideo();
}

2.0 写一个 JavaVideoFactory 去继承它 并且重写里面的方法

package com.zw.design.pattern.creational.factorymethod;

/****
 * 简单工厂方法讲解
 */
public  class JavaVideoFactory extends VideoFactory{

    @Override
    public Video getVideo() {
        return new JavaVideo();
    }
}
package com.zw.design.pattern.creational.factorymethod;

/****
 * 简单工厂
 */
public class GoVideoFactory extends VideoFactory {

    @Override
    public Video getVideo() {
        return new GoVideo();
    }
}

3.0 测试方法如下

package com.zw.design.pattern.creational.factorymethod;

public class Test {
    public static void main(String[] args) {
//        VideoFactory videoFactory=new VideoFactory();
//        Video video = videoFactory.getVideo("java");
//        video.produce();

//        videoFactory.getVideo(JavaVideo.class).produce();

//       定义 定义一个创建对象的接口但让实现这个接口的类来决定实例化那个类 但工厂方法让类的实例化推迟到子类中进行
//       类型 创建型
//        工厂方法 ---适用业务场景 1、创建对象需要大量重复的代码
//        客户端应用层 不依赖于产品类实例如何被创建 实现等细节
//        一个类通过其子类来指定创建那个对象
//        工厂方法 优点
//        用户只需要关心所需产品对应的工厂 无须关心创建细节
//        加入新的产品符合开闭原则 提高可扩展性
//        缺点
//        类的个数容易过多  增加复杂度
//        增加了系统的抽象性和理解难度

        VideoFactory videoFactory=new JavaVideoFactory();
        VideoFactory go=new GoVideoFactory();
        videoFactory.getVideo().produce();
        go.getVideo().produce();
    }
}

uml 图 如图所示 在这里插入图片描述 代码如下