• 设计模式课程 设计模式精讲 4-2 简单工厂coding


    1    代码演练

    1.1  未使用简单工厂模式代码

    1.2  使用简单工厂模式

    1.3  使用反射机制简单工行模式

    1    代码演练
    1.1  未使用简单工厂模式代码

    测试类:

    package com.geely.design.pattern.creational.simplefactory;
    
    public class Test {
        /**
         * 注:此为反例,
         * 没有用简单工厂模式之前,需要new对象。
         * @param args
         */
        public static void main(String [] args){
            Video video = new JavaVideo();
            video .printVideo();
        }
    }

    父类Video:

    package com.geely.design.pattern.creational.simplefactory;
    
    public abstract class Video {
        public abstract void printVideo();
    }

    子类javaVideo:

    package com.geely.design.pattern.creational.simplefactory;
    
    public class JavaVideo extends Video{
        @Override
        public void printVideo() {
            System.out.println("录制java视频");
        }
    }

    子类netVideo:

    package com.geely.design.pattern.creational.simplefactory;
    
    public class NetVideo extends Video{
        @Override
        public void printVideo() {
            System.out.println("录制.Net视频!");
        }
    }

    打印结果:

    录制java视频
    
    Process finished with exit code 0
    1.2  使用简单工厂模式

    测试类:

    package com.geely.design.pattern.creational.simplefactory;
    
    public class Test {
        /**
         * 注:此为反例,
         * 没有用简单工厂模式之前,需要new对象。
         * @param args
         */
    //    public static void main(String [] args){
    //        Video video = new JavaVideo();
    //        video .printVideo();
    //    }
    
        /**
         * 2    简单工厂模式
         * 这里通过参数调取工厂类,直接获得工厂子类
       * 可以使用静态方法来创建工厂,优点是工厂类不用new了,但是缺点是静态方法继承后无法修改父类 *
    @param args */ public static void main(String [] args){ VideoFactory videoFactory = new VideoFactory(); Video video = videoFactory.getVideo("net"); video .printVideo(); } }

    工厂类:

    package com.geely.design.pattern.creational.simplefactory;
    
    public class VideoFactory {
        private Video video = null;
    
        public Video getVideo(String param) {
            if("java".equals(param)){
                return  new JavaVideo();
            }else if("net".equals(param)){
                return  new NetVideo();
            }else{
                return null;
            }
        }
    }

    父类(同上):

    子类javaVideo:(同上)

    子类netVideo(同上):

    打印日志:

    录制.Net视频!
    
    Process finished with exit code 0
    1.3  使用反射机制简单工行模式

    测试类:

    package com.geely.design.pattern.creational.simplefactory;
    
    public class Test {
        /**
         * 注:此为反例,
         * 没有用简单工厂模式之前,需要new对象。
         * @param args
         */
    //    public static void main(String [] args){
    //        Video video = new JavaVideo();
    //        video .printVideo();
    //    }
    
        /**
         * 2    简单工厂模式
         * 这里通过参数调取工厂类,直接获得工厂子类
         * @param args
         */
    //    public static void main(String [] args){
    //        VideoFactory videoFactory = new VideoFactory();
    //        Video video = videoFactory.getVideo("net");
    //        video .printVideo();
    //    }
    
        /**
         * 3    简单工厂模式
         * 通过反射机制,获得工厂子类
         * @param args
         */
        public static void main(String [] args){
                VideoFactory videoFactory = new VideoFactory();
                //通过反射获取子类
                Video video = videoFactory.getVideo(JavaVideo.class);
                video.printVideo();
        }
    }

    工厂类:

    package com.geely.design.pattern.creational.simplefactory;
    
    public class VideoFactory {
        private Video video = null;
    
    //    public Video getVideo(String param) {
    //        if("java".equals(param)){
    //            return  new JavaVideo();
    //        }else if("net".equals(param)){
    //            return  new NetVideo();
    //        }else{
    //            return null;
    //        }
    //    }
    
    
        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;
        }
    }

    父类(同上):

    子类javaVideo:(同上)

    子类netVideo(同上):

    打印日志:

    录制java视频
    
    Process finished with exit code 0

     

  • 相关阅读:
    Struts 2 Overview
    Struts 2 Tutorial Basic MVC Architecture
    Struts 2 Tutorial
    Struts DynaActionForm example
    Struts – MappingDispatchAction Example
    Struts DispatchAction Example
    【置顶】本博客文章推荐和迁移声明
    Whatbeg's blog 文章列表
    如何实现并应用决策树算法?
    【2016读书】4月读书笔记
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/11258766.html
Copyright © 2020-2023  润新知