接口|十三种设计模式之单例模式和静态代理模式

接口

  • 可以理解为是一种特殊的抽象类
  • 抽象类:是一个事物所具有的功能
  • 接口:是一个事物额外的功能
  • 二者之间的选择: 推荐使用接口
  • 如果父类的功能是有功能体实现的,也有只定义功能子类可以具有的功能但是没有实现,可以抽象类
  • 接口的优点:
  •  1.提高代码的复用性
    
  •  2.解耦
    
  •  3.定义编程规范
    
  •  4.接口多实现
    
  • 使用interface定义接口
  • 组成:
  •  jdk1.7及之前: 
    
  •  	属性:public static final公共的静态的常量
    
  •  		修饰符public static final可以省略,默认
    
  •  	方法:public abstract 公共的抽象的方法 
    
  •  		修饰符public abstract是默认的,可以不写
    
  • 注意:
  •  1.接口不能实例化
    
  •  2.接口需要实现,实现接口使用关键字implements,实现了接口就拥有了接口中的功能(与继承很像)
    
  •  3.接口的使用:
    
  •  	1)具体的实现类:实现了接口,就要重写这个接口中的所有抽象方法+按需新增
    
  •  	2)抽象的实现类:重写部分抽象功能+按需新增
    
  •  4.类只能实现接口,不能继承接口,但是类只能继承类,不能实现类  类单继承类,类多实现接口
    
  •  5.接口不能继承和实现类,接口只能继承接口,不能实现接口,接口可以多继承接口
    

==============================================================================================
十三种设计模式:

  • 单例模式:保证一个类只能构建一个实例

  •  **饿汉式**:在类第一次加载的时候就创建实例	--线程安全的
    
  •  **懒汉式**:第一次调用功能的时候创建实例		--线程不安全的,效率较高
    
  •  步骤:
    
  •  	1.构造器私有化
    
  •  	2.私有的静态的该类的引用
    
  •  	3.公共的静态的访问方式
    
  • 静态代理

  • 简单工厂模式
    ==============================================================================================
    单例饿汉式*:
    */
    public class Single {
    //2.私有的静态的该类的引用
    private static Single single=new Single();
    //1.构造器私有化
    private Single(){ //不允许随意再外部创建对象

    }
    //3.公共的静态的访问方式
    public static Single newInstance(){
    return single;
    }

}

单例:懒汉式
*/
public class SingleTon {
//2.私有的静态的该类的引用
private static SingleTon single=null;
//1.私有构造
private SingleTon(){}
//3.公共静态的访问方式
public static SingleTon newInstance(){
if(single==null){
single=new SingleTon();
}
return single;
}
}

静态代理模式:

  • 真实角色:项目经理
  • 代理角色:hr
  • 代理行为
  • 1.真是角色和代理角色实现相同的接口|父类
  • 2.代理角色持有真实角色的引用
  • 3.代理行为
  • 优势:降低了与真实角色的交流,减少代码的耦合度,便于后去维护和扩展
    */
    public class StaticProxy {
    public static void main(String[] args) {
    UserManager UserManager=new UserManager();
    Hr hr=new Hr(UserManager);
    hr.addUser();
    }
    }

//相同的接口
interface AddUser{
void addUser();
}

//真实角色:项目经理
class UserManager implements AddUser{

@Override
public void addUser() {
	System.out.println("项目经理录用人");
}

}

//代理角色:hr
class Hr implements AddUser{
//代理角色持有真实角色的引用
private UserManager manager;

public Hr() {
	// TODO Auto-generated constructor stub
}

public Hr(UserManager manager) {
	super();
	this.manager = manager;
}

@Override
public void addUser() {
	System.out.println("------筛选简历---------");
	System.out.println("------通知面试---------");
	manager.addUser();
	System.out.println("---------------------");
}

}

猜你喜欢

转载自blog.csdn.net/PussyCatsss/article/details/90811082
今日推荐