第十一节(单例模式初步、类的继承)

设计模式 

什么是设计模式:设计模式是可以重复利用的解决方案

设计模式的提出是在 1995 人,是由 4 为作者提出的,称为 GoF, 也就是“四人组”

设计模式从结构上分为三类:

  创建型

  结构性

  行为型
其中最简单的设计模式就是单例了,单例这种模式,尽量少用,也有将其称为“反模式” 


单例模式有什么好处:

我们知道对象实例创建完成后, 会放到堆中, 如果堆中的实例过多, 将会存在特别多的垃圾,这样会导致一些问题, 如内存溢出等,

使用单例模式后,只会创建一个实例,显著减少对象实例的个数,同时也会提高性能,因为不会频繁的创建对象,这只是他的一个好处,

其他方面项目中再说。


单例模式的三要素:

  一.  在类体中需要具有静态的私有的本类型的变量

  二.  构造方法必须是私有的

  三. 提供一个公共的静态的入口点方法

 

单利模式分为两种:
1. 饿汉式单利模式:在类加载阶段就创建了对象
2. 懒汉式单利模式:用到对象时才会创建对象

/*
    实现单例模式
    
        单例模式的要领:
            1. 构造方法私有化
            2. 对外提供一个公开的静态的获取当前类型的对象的方法
            3. 提供一个当前类型的静态变量
        
        
        单利模式分为两种:
            1. 饿汉式单利模式:在类加载阶段就创建了对象
            2. 懒汉式单利模式:用到对象时才会创建对象
        
        
*/
public class Singleton{ // 懒汉式

    // 静态变量
    private static Singleton s;

    // 将构造方法私有化 空构造(如果我们没有自定义构造方法时,系统自动会有一个默认的空构造)
    private Singleton(){}
    
    //  对外提供一个公开获取Singleton对象的方法
    public static Singleton getInstance(){
        if(s == null){
            s = new Singleton();
        }
        
        return s;
        
    }
}

/*
    调用懒汉式 设计模式 ,输出的是同一个内存地址

*/
public class Test01{
    
    public static void main(String[] args){
        
        /* 编译不通过(构造方法私有化了)
            Singleton s1 = new Singleton();
            Singleton s2 = new Singleton();
            
            System.out.println(s1 == s2);
        */
        
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        Singleton s3 = Singleton.getInstance();
        
        System.out.println(s1 == s2); // 输出 true
        System.out.println(s2 == s3); // 输出 true
    }

}

/////////////////////////////////////////

/*
    饿汉式单例模式
*/
public class User{
    
    // 类加载时,只执行一次
    private static User user = new User();
    
    // 构造方法私有化
    private User(){}
    
    // 提供公开的方法
    public static User getInstance(){
        return user;
    }
    

}
/*
    调用 饿汉式单例模式
*/
public class Test02{

    public static void main(String[] args){
        
        User u1 = User.getInstance();
        User u2 = User.getInstance();
        
        System.out.println(u1 == u2); // 输出 true
        
        
    }

}
 
类的继承

面向对象的三大特性:

封装(封装细节)

继承

多态

继承是面向对象的重要概念,软件中的继承和现实中的继承概念是一样的

继承是实现软件可重用性的重要手段, 如:A 继承 B,A 就拥有了 B 的所有特性,如现

实世界中的儿子继承父亲的财产,儿子不用努力就有了财产,这就是重用性

java 中只支持类的单继承,也就是说 A 只能继承 B,A 不能同时继承 C

java 中的继承使用 extends 关键字,语法格式:

[修饰符] class 子类 extends 父类 {

}

例题1:
public
class Person{ // 姓名 private String name; // 性别 private boolean sex; // 年龄 private int age; public void setName(String name){ this.name = name; } public String getName(){ return name; } public void setSex(boolean sex){ this.sex = sex; } public boolean getSex(){ return sex; } public void setAge(int age){ this.age = age; } public int getAge(){ return age; } } public class Student{ // 学号 private int id; // 姓名 private String name; // 性别 private boolean sex; // 年龄 private int age; public void setId(int id){ this.id = id; } public int getId(){ return id; } public void setName(String name){ this.name = name; } public String getName(){ return name; } public void setSex(boolean sex){ this.sex = sex; } public boolean getSex(){ return sex; } public void setAge(int age){ this.age = age; } public int getAge(){ return age; } } public class Student01 extends Person{ //继承了Person类 即拥有了Person类的全部属性 // 学号 private int id; // 班级编号 private int classId; public void setId(int id){ this.id = id; } public int getId(){ return id; } } public class ExtendsTest01{ public static void main(String[] args){ Student s = new Student(); s.setId(10001); s.setName("ming"); s.setSex(true); s.setAge(18); Student s1 = new Student(); s1.setId(10002); s1.setName("ming哥"); s1.setSex(true); s1.setAge(48); System.out.println("id = " + s.getId()); System.out.println("name = " + s.getName()); System.out.println("sex = " + s.getSex()); System.out.println("age = " + s.getAge()); System.out.println("id = " + s1.getId()); System.out.println("name = " + s1.getName()); System.out.println("sex = " + s1.getSex()); System.out.println("age = " + s1.getAge()); } }

 

posted @ 2015-01-16 19:37  哥的笑百度不到  阅读(246)  评论(0编辑  收藏  举报