Java模式包括很多种,例如构造模式、责任型模式等很多种模式。
最简单的两种模式:单态模式和工厂模式
单态模式:单态模式下,对所有同一类型的Bean的请求,都将返回同一个共享实例。因此,单态模式可以大大降低Java对象创建和销毁时的系统开销。
示例代码:
public clasa SingletonTest {
int value;
private static SingletonTest instance;
private SinglettonTest () {
System.out.pringln("正在执行构造器。。。。。。");
}
public static SingletonTest getInstance() {
if(instance == null) {
instance = new SingletonTest();
}
return instance;
}
public int getValue() {
return this.value;
}
public void setValue(int value) {
this.value = value;
}
public static void main(String[] args) {
SingletonTest t1 = SingletonTest.getInstance();
SingletonTest t2 = SingletonTest.getInstance();
t2.setValue(9);
System.out.println(t1 == t2);
System.out.println(t1.getValue() == t2.getValue());
}
}
运行结果:
正在执行构造器。。。。。。
true
true
由以上的执行结果可以看出,类的两个实例完全相同,这也就证明:单态模式的类的全部实例是同一个共享实例。在程序里虽然获取了类的两个实例,但实际上只执行一次构造器,因为对于单例模式的类,不管执行多少次的创建实例的请求,都只执行一次构造器,返回同一个共享实例。
单例模式虽然有有点,但也不是任何情况下都可以使用的,在多线程的状态下,如果多个线程同时操作单例的或者共享数据的时候是需要注意的,推荐搜索:单线程 单例,顺带了解下。
多线程中应用单例模式,可能会因为操作的原子性、有序性、可见性的原因,导致程序出现不可预料的错误。
单例模式的饿汉模式、懒汉模式、登记式(静态内部类)
涉及内容:同步、阻塞、synchronized 、volatile、双重检查、Initialization on Demand Holder(IODH)还有好多,什么java的内存模型啊、指令重排啊、jvm等等,内容太多了,已经要疯了
工厂模式:
工厂模式提供各个对象之间清晰的角色划分,可降低程序的耦合性。在Java的设计模式当中,工厂模式包括简单工厂模式、工厂方法模式和抽象工厂模式。
简单工厂模式:参考简单工厂模式
工厂方法模式:参考工厂方法模式
抽象工厂模式:参考抽象工厂模式