zoukankan      html  css  js  c++  java
  • 设计模式-工厂方法

    一、定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行

    二、类型: 创建型

    三、适用场景:

      创建对象需要大量重复的代码

      客户端(应用层)不依赖于产品类实例如何被创建、实现等细节

      一个类通过其子类来指定创建哪个对象

    四、优点:

      用户只需要关心所需要产品对应的工厂,无须关心创建细节。

      加入新的产品符合开闭原则,提高可扩展性

    五、缺点:

      类的个数容易过多,增加复杂度

      增加了系统的抽象性和理解难度

      增加了系统的抽象性和理解难度

    六、Code

    对简单工厂进行改造

    1. Video类

    public abstract class Video {
        public abstract void  produce();
    }
    

      

    2. JavaVideo类

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

      

    3. AndroidVideo类

    public class AndroidVideo  extends Video {
        @Override
        public void produce() {
            System.out.println("录制Android视频");
        }
    }
    

      

     4. VideoFactory 类。 这是一个抽象类

    public  abstract  class VideoFactory {
    
        public abstract Video getVideo();
    
    }
    

      

    5. JavaVideoFactory 类

    public class JavaVideoFactory  extends  VideoFactory{
    
        @Override
        public Video getVideo() {
            return new JavaVideo();
        }
    }
    

     

    6.AndroidVideoFactory  类

    public class AndroidVideoFactory  extends  VideoFactory{
        @Override
        public Video getVideo() {
            return new AndroidVideo();
        }
    }
    

      

     7. JavaScriptFactory 类

    public class JavaScriptFactory extends VideoFactory {
        @Override
        public Video getVideo() {
            return new JavaScriptVideo();
        }
    }
    

      

    8. 测试类

    public class Test {
    
        public static void main(String[] args) {
            VideoFactory videoFactory = new JavaVideoFactory();
            Video video = videoFactory.getVideo();
            video.produce();
    
            videoFactory = new AndroidVideoFactory();
             video = videoFactory.getVideo();
            video.produce();
    
            videoFactory = new JavaScriptFactory();
             video = videoFactory.getVideo();
            video.produce();
    
    
        }
    }
    

      

    9. UML图

    九、工厂方法在JDK中的实例

    1. Collection类中的Iterator<E> iterator();方法是一个工厂方法

    Collection的实现ArrayList类中的iterator方法  

    public Iterator<E> iterator() {
    return new Itr();
    }

    ArrayList可以被认为是实现工厂

    2. URLStreamHandlerFactory接口

    public interface URLStreamHandlerFactory {
        URLStreamHandler createURLStreamHandler(String var1);
    }
    

      

    Factory 类实现了URLStreamHandlerFactory接口接口
    private static class Factory implements URLStreamHandlerFactory {
            private static String PREFIX = "sun.net.www.protocol";
    
            private Factory() {
            }
    
            public URLStreamHandler createURLStreamHandler(String var1) {
                String var2 = PREFIX + "." + var1 + ".Handler";
    
                try {
                    Class var3 = Class.forName(var2);
                    return (URLStreamHandler)var3.newInstance();
                } catch (ReflectiveOperationException var4) {
                    throw new InternalError("could not load " + var1 + "system protocol handler", var4);
                }
            }
        }
    

      


    3. slf4j中的LoggerFactory类中的getLogger方法
        public static Logger getLogger(String name) {
            ILoggerFactory iLoggerFactory = getILoggerFactory();
            return iLoggerFactory.getLogger(name);
        }
    

      



  • 相关阅读:
    Linux基础命令---swapon
    Linux基础命令---fsck
    Linux基础命令---e2fsck
    Combination Sum
    Pow(x, n)
    Permutations
    Permutation Sequence
    Rotate List
    Unique Paths II
    Unique Paths
  • 原文地址:https://www.cnblogs.com/linlf03/p/9743288.html
Copyright © 2011-2022 走看看