设计模式 什么是设计模式:设计模式是可以重复利用的解决方案 设计模式的提出是在 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()); } }
时间: 2024-10-18 11:41:39