美文网首页
单例模式,工厂模式

单例模式,工厂模式

作者: 云承寒 | 来源:发表于2017-05-25 10:21 被阅读0次

    单例模式

    使用单例模式构建的类,在整个程序运行期间该类只存在一个实例对象。

    实现方式
    • 用 private 修饰类的构造方法,这样就不能在类的外部使用 new 关键字来创建实例对象。

    • 在类的内部创建一个该类的对象,使用 private static 修饰。

    • 提供一个外部能获取该类对象的静态方法。

    1.饿汉模式
    public class SingleLineDemo {
    
        private SingleLineDemo() {
    
        }
    
        private static final SingleLineDemo SINGLELINE_DEMO = new SingleLineDemo();
    
        public static SingleLineDemo getSingleLineDemoInstance() {
    
            return SINGLELINE_DEMO;
        }
    }
    
    2.懒汉模式
    public class SingleLineDemo {
    
        private SingleLineDemo() {
    
        }
    
        private static SingleLineDemo sLineDemo = null;
    
        public static SingleLineDemo getSingleLineDemoInstance() {
            // 存在线程安全问题
            if (sLineDemo == null) {
                sLineDemo = new SingleLineDemo();
            }
            return sLineDemo;
        }
    }
    
    3.综合升级
    public class SingleLineDemo {
    
        private SingleLineDemo() {
    
        }
    
        private static SingleLineDemo sLineDemo = null;
    
        public static SingleLineDemo getSingleLineDemoInstance() {
            // 双重校验,解决线程安全,并效率相对较高
            if (sLineDemo == null)
                synchronized (sLineDemo) {
                    if (sLineDemo == null)
                        sLineDemo = new SingleLineDemo();
                }
    
            return sLineDemo;
        }
    }
    

    工厂模式

    工厂模式就是根据传入的标记,生产不同类的模式。

    //接口定义公共规范
    public interface IWidget {
        void widget();
    }
    
    public class FirstProduct implements IWidget {
    
        @Override
        public void widget() {
            System.out.println("产品1的组件");
        }
    }
    
    public class SecondProduct implements IWidget {
    
        @Override
        public void widget() {
            System.out.println("产品2的组件");
        }
    }
    
     public static void main(String[] args) {
    
            IWidget productWidget = getProductWidget(0);
            productWidget.widget();
        }
    
        //工厂模式,根据标记生成相应的类
        public static IWidget getProductWidget(int type) {
            switch (type) {
                case 0:
                    return new FirstProduct();
    
                case 1:
                    return new SecondProduct();
            }
            return null;
        }
    

    相关文章

      网友评论

          本文标题:单例模式,工厂模式

          本文链接:https://www.haomeiwen.com/subject/iimaxxtx.html