大话设计模式-----(八)迭代器模式、单例模式

本文介绍了迭代器模式和单例模式的概念与实现方式。迭代器模式用于访问聚合对象的元素而不暴露其内部结构;单例模式确保一个类只有一个实例,并提供全局访问点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迭代器模式

提供一种方法顺序访问一个聚合对象中各个元素,而不是暴露该对象的内部表示

就是 for 啊~~

迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器来负责,这样既可以做到不暴露集合内部,又可以让外部代码透明地访问集合内部的数据。

这位老哥讲的很好 学习
http://blog.youkuaiyun.com/zhengzhb/article/details/7610745

保证一个类仅有一个实例,并提供一个访问他的全局访问点

也就是只能实例化一个对象。书上的例子是说像一个窗体,点击就创建一个。如果不是单例模式,那么点击就会创建好多个。用单例模式就只会创建一个。
是因为将构造函数设置为私有属性了。但是又写了一个静态的返回实例的方法。前提首先创建一个全局的静态对象变量。然后在方法中判断这个全局变量是否是null。是空的话才会创建对象。还有可能造成线程安全问题。使用sync来锁住创建实例。并在锁里面在写个判断null方法。因为一个线程结束,另一个线程开始进入的时候要判断是否为null!!!

先写个类似单例模式的

class Singleton{
    private static Singleton instance;
    //江构造函数设置为私有的,外面就不能用new 构造函数来实例化了
    private Singleton(){}

    public static Singleton GetInstance(){
        //如果是第一次创建就返回实例。否则不返回
        if(instance==null){
        instance = new Singleton(); 

        }
        return instance;
        }

    }

客户端

public static void main(String[] args) {

        Singleton s1 = Singleton.GetInstance();
        Singleton s2 = Singleton.GetInstance();


        if(s1==s2){
            System.out.println("单例模式");
        }
    }

这里写图片描述

在线程中就是添加sync

    public static Singleton GetInstance(){
        //如果是第一次创建就返回实例。否则不返回
        if(instance==null){
            synchronized (instance) {
                if(instance==null){
                instance = new Singleton();
                }
            }


        }
        return instance;
        }

还有,单例模式分为懒汉模式和饿汉模式……..无力吐槽

懒汉模式就是我上面写的。私有静态对象不进行初始化。
饿汉模式是开始就进行初始化。赋值为实例化对象用 new 实现。然后静态方法返回的就是这个静态对象。当然,构造函数是私有的。

public class EagerSingleton {

     private static final EagerSingleton m_instance = new EagerSingleton();


     private EagerSingleton() {
     }


     public static EagerSingleton getInstance() {
         return m_instance;
     }
}

参考

http://www.cnblogs.com/jiuyi/p/6105037.html

http://cantellow.iteye.com/blog/838473

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值