设计模式
前人所总结的代码设计思想
单例(singleton)模式
一个类只能创建一个实例对象
单例模式懒汉
单例模式中既然只能创建一个实例对象供后面使用,所以必须将构造器私有化,然后在单例类中创建自己本身的对象(创建时要调用static方法,保证这个对象制备创建一次
),然后在该类中留一个供外部获取该单例的公用方法,外部想要获该单例只能通过使用类名来访问该方法(一定是静态方法
),访问后,该方法返回这个单例对象供外使用。
class singletonex {
//创建自己本身的对象
//必须加静态方法,将single至于静态方法区,保证该语句只被执行一次
private static singletonex single = new singletonex();
private singletonex() {
System.out.println("单例模式");
}
//外部只能通过类名+方法名 进行访问,获得单例的对象
//返回值为static singleton 类型
public static singletonex getsingleton() {
return single ;
}
}
public class singleton{
public static void main(String[] args) {
//获取单例对象
singletonex s= singletonex.getsingleton();
}
}
单例模式饿汉
该开始不给单例赋值,使用时创建单例对象
class singletonex {
//创建自己本身的对象
//先不赋初值
private static singletonex single ;
private singletonex() {
System.out.println("单例模式");
}
//外部只能通过类名+方法名 进行访问,获得单例的对象
public static singletonex getsingleton() {
if(single == null) {
single = new singletonex();
return single;
}
else {
return single ;
}
}
}
public class singleton{
public static void main(String[] args) {
singletonex s= singletonex.getsingleton();
}
}
抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
//抽象类,无法被实例化
abstract class person{
int age ;
String name ;
//模拟只知道又抽烟功能,不知道抽什么烟
//被继承后,该方法必须被子类实现
//public不能被final,private等修饰
public abstract void smoking();
}
class student extends person{
public void smoking(){
System.out.println("学生在抽烟");
}
}
class worker extends person{
public void smoking() {
System.out.println("工人在抽烟");
}
}
继承了抽象类的普通类必须实现抽象类中的所有抽象方法。抽象类之间的继承不需要实现父抽象类的方法。
调用类的抽象方法不能和private,final(不能重写),static 共存。
- 如果一个类包含抽象方法,那么该类必须是抽象类。
- 任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
- 继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。
接口
interface test{
public void smoking();
public void getName();
public void getAge();
}
interface test1{
public void smoking();
public void isHaveBoyFriend();
public void isGay();
}
//类可以继承多个接口,并实现接口内的所有方法
//如果多个接口中有同名的方法被一个类所继承,
class Teacher implements test,test1{
public void isHaveBoyFriend() {
}
public void isGay() {
}
//相同方法被重写
public void smoking() {
}
public void getName() {
}
public void getAge() {
}
}
接口是对行为的抽象,类是对属性和行为的抽象。通常用interface来定义。
接口中的方法默认是抽象方法。
- 接口特性
1.接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
2.接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
3.接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。 - 抽象类和接口的区别
- 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
- 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口。