• 设计模式之创建型模式


    好长时间没有写博客了,今天看了创建型设计模式,做个简单的总结

      创建型模式

        这种类型的设计模式提供了一种在创建对象的同时隐藏创建逻辑。包含工厂模式(Factory Pattern)抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)

      工厂模式(Factory Pattern)

    • 应用实例:您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。
    • 解释:工厂模式相对比较简单,我们首先创建它的接口Shape 以及实现类,然后在创建工厂类,在Demo中通过不同的类型通过工厂获取不同的对象

    抽象工厂模式(Factory Pattern)

      应用实例:工作了,为了参加一些聚会,肯定有两套或多套衣服吧,比如说有商务装(成套,一系列具体产品)、时尚装(成套,一系列具体产品),甚至对于一个家庭来说,可能有商务女装、商务男装、时尚女装、时尚男装,这些也都是成套的,即一系列具体产品。假设一种情况,在您的家中,某一个衣柜(具体工厂)只能存放某一种这样的衣服(成套,一系列具体产品),每次拿这种成套的衣服时也自然要从这个衣柜中取出了。用 OO 的思想去理解,所有的衣柜(具体工厂)都是衣柜类的(抽象工厂)某一个,而每一件成套的衣服又包括具体的上衣(某一具体产品),裤子(某一具体产品),这些具体的上衣其实也都是上衣(抽象产品),具体的裤子也都是裤子(另一个抽象产品)。

      

        解释:在Demo类中,先创建工厂创造器获取工厂,通过创建抽象类获取工厂。最后通过具体的工厂类获取对象的实现。

      单例模式

        应用实例:单例模式的例子实现太多就不列举具体那里使用了,说说对单例的理解,首先单例类只有一个实例,单例类必须自己创建自己的实例,单例类必须给其他对象提供这一实例。

      单例模式的几种实现方式

        1.懒汉式,线程不安全  

    public class Singleton {  
        private static Singleton instance;  
        private Singleton (){}  
      
        public static Singleton getInstance() {  
        if (instance == null) {  
            instance = new Singleton();  
        }  
        return instance;  
        }  
    }
      2.懒汉式,线程安全
    public class Singleton {  
        private static Singleton instance;  
        private Singleton (){}  
        public static synchronized Singleton getInstance() {  
        if (instance == null) {  
            instance = new Singleton();  
        }  
        return instance;  
        }  
    }//这里备注下,这种加锁的方式影响效率,适用于对getInstance使用不太频繁的场景中
      3.饿汉式,线程安全
    public class Singleton {  
        private static Singleton instance = new Singleton();  
        private Singleton (){}  
        public static Singleton getInstance() {  
        return instance;  
        }  
    }
      4.双检锁/双重检验锁 JDK 1.5以上
      
    public class Singleton {  
        private volatile static Singleton singleton;  
        private Singleton (){}  
        public static Singleton getSingleton() {  
        if (singleton == null) {  
            synchronized (Singleton.class) {  
            if (singleton == null) {  
                singleton = new Singleton();  
            }  
            }  
        }  
        return singleton;  
        }  
    }

      5.登记式、静态内部类
    public class Singleton {  
        private static class SingletonHolder {  
        private static final Singleton INSTANCE = new Singleton();  
        }  
        private Singleton (){}  
        public static final Singleton getInstance() {  
        return SingletonHolder.INSTANCE;  
        }  
    }

      6.枚举 JDK 1.5以上
      
    public enum Singleton {  
        INSTANCE;  
        public void whateverMethod() {  
        }  
    }
     
    
    
    
  • 相关阅读:
    作业
    Day2
    Day1
    让Antd 的Modal 可以拖动
    JS日期处理——月末、季度末
    前端常见问题收录
    前端面试题收录
    使用ES6 Set类型 数组去重
    小程序开发:用Taro搭建框架
    JS 树形结构与数组结构相互转换、在树形结构中查找对象
  • 原文地址:https://www.cnblogs.com/wanghp/p/9197949.html
Copyright © 2020-2023  润新知