接口和工厂设计模式相关知识总结

本文详细解析了Java中接口的概念与用法,包括接口的定义、特性及其实现方式。同时,深入探讨了工厂设计模式,介绍了简单工厂模式与工厂方法模式的特点和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接口就是抽象方法和全局常量的集合
接口的出现解决了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.多个具体工厂(每个产品家族拥有自己的工厂)

抽象工厂模式(多个产品线混合)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值