zoukankan      html  css  js  c++  java
  • 设计模式

    1、单例模式

    (1)使用静态内部类来维护单例的实现:

    懒汉模式,同时实现延迟加载和线程安全。静态内部类只有在第一次被使用的时候才会初始化。内部类里的静态变量保证线程安全。

    当getInstance()第一次被调用的时候,第一次读取SingletonFactory.instance,导致SingletonFactory被初始化;当这个内部类初始化的时候,会初始化它的静态域,从而创建instance实例,由于是静态域,因此只会被jvm在装载类的时候初始化一次,由jvm保证了它的线程安全。

    public class Singleton{
        private Singleton(){}
        private static class SingletonFactory{
            private static Singleton instance = new Singleton():
        }
        
        public static Singleton getInstance(){
            return SingletonFactory.instance;
        }
    }

    (2)将创建类和getInstance()分开,单独为创建加synchronized关键字:

    public class Singleton{
        private static Singleton instance = null;
        private Singleton(){}
        private static synchronized void syncInit(){
            if(instance==null){
                instance = new Singleton();
            }
        }
        public static Singleton getInstance(){
            if(instance==null){
                syncInit();
            }
            return instance;
        }
    }

    (3)使用枚举:

    类构造器只能被一个线程在类加载的初始化阶段进行执行,所以枚举的每个实例在Java堆中有且只有一个副本。

    public enum Singleton { INSTANCE;}

    2、工厂模式

    简单工厂模式:

    public interface Sender{
        public void Send();
    }
    
    public class MailSender implements Sender{
        public void Send(){
            syso("mail sender");
        }
    }
    public class SmsSender implements Sender{
        public void send(){
            syso("sms sender");
        }
    }
    
    public class SendFactory{
        // 普通工厂模式
        public Sender produce(String type){
            if("mail".equals(type)){
                return new MailSender();
            }else if("sms".equals(type)){
                return new SmsSender();
            }
        }
        
        // 静态工厂方法模式
        public static Sender produceMail(){
            return new MailSender();
        }
        public static Sender produceSms(){
            return new SmsSender();
        }
        
    }

    抽象工厂模式:

    public interface Sender{
        public void Send();
    }
    public interface Provider{
        public Sender produce();
    }
    
    public class MailSender implements Sender{
        public void Send(){
            syso("mail sender");
        }
    }
    public class SmsSender implements Sender{
        public void send(){
            syso("sms sender");
        }
    }
    
    public class SendMailFactory implements Provider{
        public Sender produce(){
            return new MailSender();
        }
    }
    public class SendSmsFactory implements Provider{
        public Sender produce(){
            return new SmsSender();
        }
    }
  • 相关阅读:
    OpenLDAP备份和恢复
    OpenLDAP搭建部署
    Python正则表达式
    ansible学习
    Jenkins学习
    docker学习2
    让阿里告诉你, iOS开发者为什么要学 Flutter !
    用UIKit和UIView在视图上执行iOS动画
    iOS开发如何面对疫情过后的面试高峰期 !
    如何写好一个UITableView
  • 原文地址:https://www.cnblogs.com/hesier/p/5640623.html
Copyright © 2011-2022 走看看