一.
静态的只能访问静态的.单例模式.....每个类只有一个实例
/**
* 第一种单例模式:类加载的时候就创建
* */
public class Singleton {
private static Singleton singleton=new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return singleton;
}
}
/**
* 第二种单例模式:使用的时候才创建
* */
public class Singleton2 {
private static Singleton2 singleton2;
private Singleton2(){
}
public static Singleton2 getInstance(){
if(null==singleton2){//第一次使用
singleton2=new Singleton2();
}
return singleton2;
}
}
二.
非静态的什么都可以访问(即可以访问静态的,也可以访问非静态的)
三.
代理模式:以真实角色作为代理角色的属性
1.声明一个抽象类或者接口(有方法)
/**
* 定义抽象类。抽象角色:规定了真实角色与代理角色共同是实现的接口
* */
public abstract class Subject {
public abstract void request();
}
2.让真正角色继承(实现)上面的接口,并写自己的业务逻辑
/**
* 真实角色。我们要访问的角色
* */
public class RealSubject extends Subject {
public void request() {
System.out.println("From real subject");
}
}
3.让代理角色也继承(实现)上面的接口,以真实角色作为代理角色的属性,并写自己的业务逻辑(实现真正角色的业务)
/**
* 代理角色:是客户端与真实的角色之间的桥梁
* */
public class ProxySubject extends Subject {
/**
* 以真实角色作为代理角色的属性
* */
private RealSubject realSubject ;
public void request() {
this.preRequest();
if(null==realSubject){
realSubject=new RealSubject();
}
realSubject.request();//真正要完成的事情
this.postRequest();
}
private void preRequest(){
System.out.println("pre request");
}
private void postRequest(){
System.out.println("post request");
}
}
4.在客户类利用多态,让接口的引用指向代理角色的实例,并调用代理角色的方法
/**
* 客户端
* */
public class Client {
public static void main(String[] args) {
Subject subject=new ProxySubject();
subject.request();
}
}