"抽象工厂模式"-之Java,Android面试必问设计模式(2/9)

介绍

这是我给大家介绍的8个面试必问的设计模式的第二类:抽象工厂模式.学完这8类必会的那么面试就不会有什么问题了,其余的无非都是多态的演变.好的开始讲解第二类:


大家可以发现,前面我给大家已经讲过了”工厂模式”,那么现在这篇文章是”抽象工厂模式”,这两个模式的有什么区别呢,下面我就给大家总结出他们的区别和特点


“抽象”工厂方法模式和普通工厂方法的不同:

  • 1.”每个具体实例”的背后都有一个工厂类.
  • 2.有各个工厂类统一的”接口”

存在的原因:

  • 由于普通工厂模式,要”拓展功能”的时候,需要对”工厂类”进行修改

(例子:比如现在又来了个发送彩信的方法,普通方法:必须修改工厂类方法,添加一个方法,并new,不符合开闭原则

解决方法:

  • 建造多个工厂类

(例如,短信类创建一个短信工厂类,邮箱也是如此,工厂类都实现同一个接口,为了等下统一执行工厂类的方法,这样以后添加发送XXX的功能,只需要建立这个类和工厂类即可)

代码

/**
 * 抽象工厂方法:
 * 1.各个类对应有各自的工厂类
 * 2.各个工厂类实现同一个接口,因为加了功能类,加了工厂类,接口就一个,等下只要指向不同对象即可.
 * 3.最后只需要创建接口的实例即可
 * 4.后续添加功能,那么只需(添加一个类+对应的工厂类即可)
 */
//给工厂类的接口
interface Provid {
    public Send provid();
}

//发送接口
interface Send {
    public void send();
}

//发送短信类,实现发送类
class SendMessage implements Send {

    @Override
    public void send() {
        System.out.println("发送了 短信...");
    }
}
//发送邮件类,实现发送类
class SendEmail implements Send {

    @Override
    public void send() {
        System.out.println("发送了 邮件...");
    }
}
//发送信息工厂类,实现拓展接口
class SendMessageFactory implements Provid{

    @Override
    public Send provid() {
        //返回对应的类
        return new SendMessage();
    }
}
//发送邮件工厂类,实现拓展接口
class SendEmailFactory implements Provid{

    @Override
    public Send provid() {
        //返回对应的类
        return new SendEmail();
    }
}
class Test {
    public static void main(String[] args) {
        //实现工厂接口的具体实例
        Provid semail = new SendEmailFactory();
        //实现发送的具体实例
        Send smail = semail.provid();
        //调用接口存在的方法即可.
        smail.send();
    }
}

打印结果:

发送了 邮件...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值