加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java - 设计模式

发布时间:2020-12-15 07:32:20 所属栏目:Java 来源:网络整理
导读:设计模式是一种设计思想,解决方案,经验总结。 java的设计模式大体上分为三大类: 创建型模式(5种): 用于解决结局对象创建 单例模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式。 结构型模式(7种):把类和对象结合在一起,构成复杂结构 适配

设计模式是一种设计思想,解决方案,经验总结。

java的设计模式大体上分为三大类:

  • 创建型模式(5种): 用于解决结局对象创建
  • 单例模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式。
  • 结构型模式(7种):把类和对象结合在一起,构成复杂结构
  • 适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
  • 行为型模式(11种): 解决类或对象之间的交互,优化类或者对象之间的关系
  • 观察者模式、策略模式、模板方法模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

?

1. 单例模式(Singleton)

如果一个类中只有方法会被大量使用,没必要每次都创建一个新实例,只创建一个实例,每次都调用这个实例的方法就可以 

 让一个类只创建一个对象。

package xiushifu.singleton;

//如果一个类中只有方法会被大量使用,没必要每次都创建一个新实例,只创建一个实例,每次都调用这个实例的方法就可以 
//让一个类只创建一个对象。
//在内部创建一个实例,构造器全部设置为private,所有方法均在该实例上改动,在创建上要注意类的实例化只能执行一次,可以采用许多种方法来实现,如Synchronized关键字,或者利用内部类等机制来实现。

//1.让构造方法变成私有
//2.通过static控制创建
public class SingleTon {

    private SingleTon(){}//将构造方法变为私有,不能通过外部随意创建

    //饿汉式
    private static SingleTon singleton = new SingleTon();  //static 表示所有实例的这个变量都被存在一个空间内,每次修改都会覆盖掉之前的值,保证了实例只有一个。

    public static SingleTon newInstance(){ //可以通过class直接调用。

        return singleton;   //因为属性也是私有的,所以需要一个公有方法来获取。
    }

    //懒汉式   使用这种则不能直接在class里直接用this.singleton了,否则会空指针。
//    private static SingleTon singleton;  //static 表示所有实例的这个变量都被存在一个空间内,每次修改都会覆盖掉之前的值,保证了实例只有一个,不直接创建实例,需要时再创建。
//
//    public static SingleTon newInstance(){ //可以通过class直接调用。
//        if(singleton == null){  //判断之前是否被调用过,如果是第一次则创建实例
//            singleton = new SingleTon();
//        }
//        return singleton;   //因为属性也是私有的,所以需要一个公有方法来获取。
//    }


    public static void main(String[] args) {
//        SingleTon.singleton就是一个初始化完毕的实例,它是属于类的,这样保证了只有一个。
        SingleTon s1 = SingleTon.singleton;//因为属性是private,所以这种写法只能在本类中使用
        SingleTon s2 = SingleTon.singleton;
        System.out.println(s1 == s2);//判断s1和s2的内存地址hashcode值是否一致。   返回一个16进制数字
        System.out.println(s1.equals(s2));//底层代码其实和s1==s2一样

        SingleTon s3 = SingleTon.newInstance();//可以在外部类中使用,和上面效果一样
        SingleTon s4 = SingleTon.newInstance();
        System.out.println(s3 == s4);
        System.out.println(s1 == s3);
    }
}

?

?

共有方法返回单例对象:

饿汉式:立即加载? ?启动项目就已经加载了,所以可能会浪费空间,不会产生空指针。? 上面的是饿汉式

懒汉式:延迟加载? ?用到了才会加载,可能会异常,用到了才会加载(在public方法中new)不会浪费空间。? ?

生命周期托管:其他对象处理

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读