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

来源:互联网 发布:unity3d游戏案例教程 编辑:程序博客网 时间:2024/06/05 06:40

介绍

这是我给大家介绍的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();    }}

打印结果:

发送了 邮件...
0 0
原创粉丝点击