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();
        }
    }
  • 相关阅读:
    轮播效果
    获取用户请求过来的URL
    前端框架——AmazeUI学习
    评论功能——多说插件学习
    SqlServer中——查找杀死阻塞进程
    Java 时区(转)
    大型网站技术演进的思考(转)
    elasticsearch threadpool
    UML 类图
    elasticsearch No node available
  • 原文地址:https://www.cnblogs.com/hesier/p/5640623.html
Copyright © 2011-2022 走看看