final:
常量
单例模式
饿汉式单例模式(拿对象时,对象已经被创建好了)
1、私有构造器:让外部不能创建A类对象
2、定义一个类变量记住类的一个对象:在类内部就把这个唯一对象创建好,因为用了private修饰符,所以要有一个get方法返回对象。
3、如果不添加private,new出来的对象可以有多个(A a1=A.a , A a2 =A.a),但是每个对象其实都是同一个,在这种情况下看似实现了单个类对象,但是如果将A.a=null, 那么对象就不存在了。可以在这个基础上加上final,让它不能进行第二次修改值。
懒汉式单例(用对象时,才开始创建对象)
枚举类(适合做信息分类和标志)
有多个对象称为多例,单例只有一个对象。
抽象类
好处
模板方法设计模式
接口
JDK8之前接口中只能由常量和抽象方法。
JDK8后的一些改变
接口的好处
接口的注意事项
接口解耦合的实例
抽象类和接口的区别
小案例
package day07.intellegentdevice;
public class JD implements Switch{//父类实现接口,这样子类都可以用press方法
private String name;
private boolean status;
public JD() {
}
public JD(String name, boolean status) {
this.name = name;
this.status = status;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return status
*/
public boolean isStatus() {
return status;
}
/**
* 设置
* @param status
*/
public void setStatus(boolean status) {
this.status = status;
}
public String toString() {
return "JD{name = " + name + ", status = " + status + "}";
}
@Override
public void press() {
this.status=!status;
}
}
package day07.intellegentdevice;
public class TV extends JD{
public TV(String name,boolean status){//父类有构造器,直接调用父类构造器
super(name,status);
}
}
package day07.intellegentdevice;
public class Phone extends JD{
public Phone(String name,boolean status){
super(name,status);
}
}
package day07.intellegentdevice;
public interface Switch {
void press();
}
package day07.intellegentdevice;
import java.io.PrintStream;
public class controlSystem {//因为这个控制系统一个就可以控制所有家电,所以设计成单例模式
private controlSystem(){};
private static final controlSystem cs=new controlSystem();
public static controlSystem getCs(){
return cs;
}
public void control(JD jd){
System.out.println(jd.getName()+"的当前状态为"+(jd.isStatus()?"开":"关"));
jd.press();
System.out.println(jd.getName()+"的当前状态为"+(jd.isStatus()?"开":"关"));
}
}
package day07.intellegentdevice;
public class Test {
public static void main(String[] args) {
JD[] jd=new JD[2];//家里的家电用多态
jd[0]=new TV("电视机",false);
jd[1]=new TV("手机",false);
controlSystem cs=controlSystem.getCs();
cs.control(jd[0]);
cs.control(jd[1]);
}
}