迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素,而不是暴露该对象的内部表示
就是 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;
}
}
参考