单态模式、工厂模式

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的设计模式当中,工厂模式包括简单工厂模式、工厂方法模式和抽象工厂模式。

简单工厂模式:参考简单工厂模式

工厂方法模式:参考工厂方法模式

抽象工厂模式:参考抽象工厂模式


猜你喜欢

转载自blog.csdn.net/heye644171300/article/details/80602340