工厂模式3-抽象工厂模式

这里需要想象一下二维坐标,x轴是产品类型,y轴是各个工厂,那么工厂实现同一个工厂接口,可想而知,要生产出对应工厂对应的产品,就需要指定工厂,再调用工厂中生产产品的方法,就可以准确得到产品。

"产品"接口

public interface INote {

    /**
     * 做笔记
     */
    void edit();
}

public interface IVideo {

    /**
     * 录制视频
     */
    void record();

}

"产品"实现

public class JavaNote implements INote {
    @Override
    public void edit() {
        System.out.println("编辑Java笔记");
    }
}

public class JavaVideo implements IVideo {
    @Override
    public void record() {
        System.out.println("录制java视频");
    }
}

public class PythonNote implements INote {
    @Override
    public void edit() {
        System.out.println("编辑Python笔记");
    }
}

public class PythonVideo implements IVideo {
    @Override
    public void record() {
        System.out.println("录制Python视频");
    }
}

"工厂"接口

public interface CourseFactory {

    INote createNote();

    IVideo createVideo();

}

"工厂"实现

public class JavaCourseFactory implements CourseFactory {
    @Override
    public INote createNote() {
        return new JavaNote();
    }

    @Override
    public IVideo createVideo() {
        return new JavaVideo();
    }
}

public class PythonCourseFactory implements CourseFactory {

    @Override
    public INote createNote() {
        return new PythonNote();
    }

    @Override
    public IVideo createVideo() {
        return new PythonVideo();
    }

}

具体使用

@Test
public void test1(){
    JavaCourseFactory javaCourseFactory = new JavaCourseFactory();
    javaCourseFactory.createNote().edit();
    javaCourseFactory.createVideo().record();
}

类关系图

image.png

小结

这里可以发现,对y轴(工厂)进行扩展是十分简单的事情,但是对x轴就不是很友好,如果需要新增一种产品,就需要对各个工厂进行维护,不符合开闭原则;但是实际开发中,不需要纠结太多,有时候问题不大,毕竟有的代码很久都不会被升级。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容