接口就是抽象方法和全局常量的集合
接口的出现解决了Java单继承的问题
1.定义接口使用关键字interface,接口的名称使用I表示
public interface INews{
void getNews();
}
2.接口中定义的方法默认为抽象方法public abstaract
定义的数据属性默认为public static final
public interface IMessage {
//public static 可以不加,默认
public static final String MSG = "hello world";
//public abstract 默认
public abstract void print();
}
3.接口内不能有已经实现的方法
4.接口不能进行实例化
5.(接口不能继承抽象类)接口可以继承多个接口,此时的接口拥有继承的接口中的抽象方法。
6.如果一个抽象类继承接口,那么抽象类中可以不实现接口中的方法
如果一个普通类继承此抽象类,那么普通类一定要实现接口和抽象类中的抽象方法
使用implements实现接口。
public class QQMessaggeImpl implements IMessage,INews {
@Override
public void print() {
System.out.println("QQMessage");
}
@Override
public void getNews() {
System.out.println(IMessage.MSG);
}
}
public class WeChatMessageImpl implements IMessage{
@Override
public void print() {
System.out.println("WeChatMessage");
}
}
抽象类和接口的区别:
1.结构组成:抽象类由普通类和抽象方法组成,接口由抽象方法和全局常量组成,没有已经实现的方法
2.权限:抽象类中拥有各种权限,接口中只能有public
3.子类使用:抽象类使用extends关键字继承抽象类,接口中使用implments关键字实现接口
4.关系:一个抽象类可以实现若干个接口,接口不能继承抽象类,接口可以使用extends关键字继承多个父接口。
interface IA{
}
interface IB{
}
public static IMessage extends IA,IB{
void print();
}
5.子类限制:抽象类中一个子类只能继承一个抽象类,而接口中一个子类可以实现多个接口
工厂设计模式:将客户端的new操作解耦到第三方(工厂类)。
简单工厂模式:(产品个数少且没有家族)
1.一个抽象的产品类(接口)-IPhone
2.多个具体产品类-HuaWeiPhone,MiPhone
3.一个工厂(new操作再此工厂中进行)客户端通过工厂类获取实例
示例:进行手机购买,可以选择购买华为或者小米手机
public interface IPhone {
void printPhone();
}
public class HuaWeiPhone implements IPhone{
@Override
public void printPhone() {
System.out.println("this is a HuaWei phone");
}
}
public class MiPhone implements IPhone{
@Override
public void printPhone() {
System.out.println("this is a Mi phone");
}
}
public class PhoneFactory {
public static IPhone creatPhone(String type){
IPhone iPhone = null;
if(type.equals("HuaWeiPhone")){
iPhone = new HuaWeiPhone();
}else if(type.equals("MiPhone")){
iPhone = new MiPhone();
}else{
System.out.println("您的输入有误,请重新输入:");
}
return iPhone;
}
}
public class Client {
public void buyPhone(IPhone iPhone) {
//此处存在NullPointerException异常,进行异常处理
try {
iPhone.printPhone();
}catch (NullPointerException e){
System.out.println("异常已经被处理掉");
}
}
public static void main(String[] args) {
Client client = new Client();
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您想要的手机:");
System.out.println("以下两款供您选择:HuaWeiPhone或者MiPhone");
String type = scanner.nextLine();
IPhone iPhone = PhoneFactory.creatPhone(type);
client.buyPhone(iPhone);
}
}
工厂方法模式:(最大的特点在于横向扩展方便)(每个产品有自己的家族,家族下有很多兄弟)
定义一个用来创建对象的接口,让子类决定实例化哪一个类。
针对每个产品(产品族)提供一个工厂类,客户端需要判断使用哪个工厂。
1.一个抽象产品类
2.多个具体产品类
3.一个抽象工厂(针对抽象产品类)
4.多个具体工厂(每个产品家族拥有自己的工厂)
抽象工厂模式(多个产品线混合)