工厂模式:
public class Factory {
public static void main(String[] args) {
BuJiaDi bu=new BuJiaDi();
bu.run();
Car car=factory("FengHuang");
car.run();
}
//工厂:制作汽车
public static Car factory(String str){
Car car=null;
//如果比较字符串常量最好放前面
if("FengHuang".equals(str)){
car=new FengHuang();
}else{
car=new BuJiaDi();
}
return car;
}
}
interface Car{
void run();
}
//车
class FengHuang implements Car{
@Override
public void run() {
System.out.println("两个轱辘跑..");
}
}
class BuJiaDi implements Car{
@Override
public void run() {
System.out.println("飞一般的感觉...");
}
}
单例模式:
保证一个类只能有一个对象,这个特点形式的类成为单例模式,但是不影响类中原有的功能
单例:
懒汉式:当第一次调用的时候才创建这个实例 ----线程不安全的,效率较高
饿汉式:在类第一次加成完成之后,就创建这个实例 ----线程安全的,效率较低
实现:
1.构造器私有化
2.私有的,静态的该类的引用,存储创建唯一的对象的
3.公共的静态的访问方式
静态代理:
- 1.真实角色和代理角色实现相同的接口|继承相同的父类
- 2.代理角色持有真实角色的引用:成员属性来进行维护
- 3.代理行为
- 优点: 减少与真实角色的交流,降低耦合度,起到功能的扩展,方便后期维护
内部类
内部类:类中定义类,就是内部类
成员内部类
- 静态内部类
- 私有内部类
- 局部内部类
- 匿名内部类
成员内部类:
当内部类作为外部类的成员的时候,就是成员内部类
特点:
1.是成员就具有成员的特点,就是可以使用成员修饰符来修饰
2.是类就有类的特点,可以继承,实现…
3.在外部类中可以通过内部类的对象使用其成员
4.成员内部类中不能定义静态的内容,除了静态的常量
私有内部类
1.私有内部类中可以使用外部类中的私有内容
2.外部类中可以使用私有内部类中的私有内容,需要通过内部类对象使用
3.私有的内部类中只能在外部类中使用,其他类中无法使用
静态内部类:
1.只有静态内部类中可以定义静态的内容,除了静态的常量
2. 静态内部类中使用外部类中的成员,通过外部类对象使用,因为内部类是静态的
局部内部类
1.方法中的内部类
2.不能使用成员修饰符 pubic…static…(final可以)
3.局部只能在它当前定义的方法中使用,通过对象使用
4.如果想要在局部内部类中使用当前方法的参数,这个参数必须被final修饰,在jdk1.8中final可以省略,但是默认
匿名内部类
interface Smoke{
void smoke();
void haha();
}
//有些实现类,没有自己本身的作用,就是为了重写抽象方法,浪费类名,项目中可能造作类过多等等..
//1. 匿名内部类 接口多态
Smoke s=new Smoke(){ //一个没有名字的实现类的类体,实现了Smoke
@Override
public void smoke() {
System.out.println("吐方块烟圈...");
}
@Override
public void haha() {
System.out.println("hhhhhhh");
}
};
s.smoke();
s.haha();
//2.没有应用接收匿名内部类的对象地址,只能在当前行使用以此
new Smoke(){ //一个没有名字的实现类的类体,实现了Smoke
@Override
public void smoke() {
System.out.println("吐烟圈...");
}
@Override
public void haha() {
System.out.println("哈哈哈哈");
}
}.haha();
new Demo().smoke(); //匿名对象
//3.做方法的参数
test(new Smoke(){
@Override
public void smoke() {
System.out.println("边吸烟边笑");
}
@Override
public void haha() {
System.out.println("边笑边吃饭..");
}
});
}
public static void test(Smoke s){
s.smoke();
}
}
接口: 特殊的抽象类
interface 接口
class 类
接口的优点:
1.接口是功能体的集合
2.是一个引用数据类型,多实现,单继承
3.解耦
4.规定开发规范
属性:
公共的静态的常量 public static final
public static final可以选择省略(默认)
方法:
public abstract 返回值类型 方法名();
public abstract 可以选择省略(默认)
具体的实现类:重写了所有的抽象方法+按需新增
抽象的实现类:按需重写抽象方法+按需新增
接口之间可以多继承,类和接口之间可以多实现