1.掌握我们设计模式中的 6 大设计原则!

  01.里氏替换
  02.单一职责
  03.依赖倒置
  04.接口隔离
  05.开闭原则
  06.迪米特法则
  
java中有常用的23种设计模式!


 单例模式:
    01.在整个应用程序中,一个类只有一个实例对象!    (之前我们一个类创建N个对象  原型/多例)
    02.这个实例对象只能在本类中创建!   本类的构造方法私有化!
    03.在类中创建一个供外部访问的接口,得到实例对象!      类创建就是需要别人访问的!
    04.无论我们创建多少个对象实例,其实都是在操作同一个对象实例
 
 
 
实现单例类的步骤:
   01.创建一个静态的需要设置成单例类的 属性!
   02.私有化构造
   03.创建一个供外部访问的接口
 

具体实现的方式:
   01.懒汉式
   02.饿汉式
   03.双重锁
2.代码:
/**
 * 懒汉式  实现 单例
 */
public class Student {
    // 01.创建一个静态的需要设置成单例类的 属性!
    private static Student student;

    // 02.私有化构造
    private Student() {
    }

    // 03.创建一个供外部访问的接口
    public static synchronized Student getInstance() {
        if (student == null) { // 判断对象是否有值
            student = new Student();
        }
        return student;
    }

    private String name; // 姓名
    private int age; // 年龄

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // 测试方法
    public static void main(String[] args) {

        // 创建3个student对象
        Student stu1 = Student.getInstance();
        Student stu2 = Student.getInstance();
        stu2.setName("小黑");
        Student stu3 = Student.getInstance();
        stu3.setAge(50);
        System.out.println(stu1 == stu2);
        System.out.println(stu2 == stu3);
        System.out.println(stu1.getName());
        System.out.println(stu1.getAge());

    }

}
懒汉式
/**
 * 饿汉式  实现 单例
 */
public class Student2 {
    // 01.创建一个静态的需要设置成单例类的 属性!
    private static Student2 student = new Student2();

    // 02.私有化构造
    private Student2() {
    }

    // 03.创建一个供外部访问的接口
    public static synchronized Student2 getInstance() {
        return student;
    }

    private String name; // 姓名
    private int age; // 年龄

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // 测试方法
    public static void main(String[] args) {

        // 创建3个student对象
        Student2 stu1 = Student2.getInstance();
        Student2 stu2 = Student2.getInstance();
        stu2.setName("小黑");
        Student2 stu3 = Student2.getInstance();
        stu3.setAge(50);
        System.out.println(stu1 == stu2);
        System.out.println(stu2 == stu3);
        System.out.println(stu1.getName());
        System.out.println(stu1.getAge());

    }

}
饿汉式
/**
 * 双重锁  实现 单例
 */
public class Student3 {
    // 01.创建一个静态的需要设置成单例类的 属性!
    private static Student3 student;

    // 02.私有化构造
    private Student3() {
    }

    // 03.创建一个供外部访问的接口
    public static synchronized Student3 getInstance() {
        if (student == null) {
            synchronized (Student3.class) {
                if (student == null) {
                    student = new Student3();
                }
            }
        }
        return student;
    }

    private String name; // 姓名
    private int age; // 年龄

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // 测试方法
    public static void main(String[] args) {

        // 创建3个student对象
        Student3 stu1 = Student3.getInstance();
        Student3 stu2 = Student3.getInstance();
        stu2.setName("小黑");
        Student3 stu3 = Student3.getInstance();
        stu3.setAge(50);
        System.out.println(stu1 == stu2);
        System.out.println(stu2 == stu3);
        System.out.println(stu1.getName());
        System.out.println(stu1.getAge());

    }

}
双重锁

 

posted on 2017-09-19 19:21  我可不是隔壁的老王  阅读(105)  评论(0编辑  收藏  举报