美文网首页
简单工厂

简单工厂

作者: yym_439 | 来源:发表于2019-02-14 10:11 被阅读0次

    定义

    由一个工厂对象决定创建出哪一种产品类的实例(类型:创建型)

    使用场景:

    工厂类负责创建的对象比较少

    客户端只知道传入工厂累的参数,对于如何创建对象不关心

    缺点:违背开闭原则,增加新产品需要修改工厂类的判断逻辑

    代码

    //抽象产品类

    public abstract class Video {
    
        public abstract voidproduce();
    
    }
    

    //具体产品

    public class JavaVideo extends Video {
    
        @Override
    
        public void produce() {
    
            System.out.println("录制Java课程视频");
    
        }
    
    }
    

    //具体产品

    public class PythonVideo extends Video {
    
        @Override
    
        public void produce() {
    
            System.out.println("录制Python课程视频");
    
        }
    
    }
    

    // 简单工厂类:

    public class VideoFactory {
    
        public Video getVideo(Class c){
    
            Video video = null;
    
            try {
    
                video = (Video) Class.forName(c.getName()).newInstance();
    
            } catch (InstantiationException e) {
    
                e.printStackTrace();
    
            } catch (IllegalAccessException e) {
    
                e.printStackTrace();
    
            } catch (ClassNotFoundException e) {
    
                e.printStackTrace();
    
            }
    
            return video;
    
        }
    
        public Video getVideo(String type){
    
            if("java".equalsIgnoreCase(type)){
    
                return new JavaVideo();
    
            }else if("python".equalsIgnoreCase(type)){
    
                return new PythonVideo();
    
            }
    
            return null;
    
        }
    
    }
    

    //客户端:

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

    UML类图

    image

    相关文章

      网友评论

          本文标题:简单工厂

          本文链接:https://www.haomeiwen.com/subject/dfmseqtx.html