JAVA设计模式之抽象工厂模式

一.简介

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。

学习之前抽象工厂模式之前,最好事先熟悉下工厂方法模式.

工厂方法模式:http://blog.csdn.net/hspingcc/article/details/54695008

抽象工厂模式的出现背景简单的说一下,是由于工厂方法模式设计的时候存在一个问题,类的创建依赖工厂类,也就是说,如果想要拓展程序(比如就上个链接中的工厂方法模式的例子为例,想要增加一个cdnsSend的发送功能),必须对工厂类进行修改(也就是要必须要修改SendFactory类),这违背了闭包原则.
所以,从设计角度考虑,有一定的问题,如何解决?由此就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。看下实现代码更好理解.

二.实现

抽象工厂角色(两者公共接口):

public interface Sender {
    public void send();
}

具体工厂角色(两个具体的类):

//QQ发送消息
public class QqSend implements Sender {
    @Override
    public void send() {
        System.out.println("QQ Send something...");
    }
}
//微信发送消息
public class WechatSend implements Sender {
    @Override
    public void send() {
        System.out.println("Wechat Send something...");
    }
}
//接口,可用于扩展实现
public interface Provider {
    public Sender produce();
}

实现上面的接口,实现qq发送的工厂类

public class SendQqFactory implements Provider {

    @Override
    public Sender produce() {
        return new QqSend();
    }

}

实现上面的接口,实现Wechat发送的工厂类

public class SendWechatFactory implements Provider {

    @Override
    public Sender produce() {
        return new WechatSend();
    }

}

测试:

public static void main(String[] args) {        
        Provider provider = new SendQqFactory();  
        Sender sender = provider.produce();  
        sender.send();  
    }

三.备注及总结

这个模式相对于工厂方法模式的好处就是,如果你现在想增加一个功能:发送csdn信息,则只需做一个实现类(CSDNSend),实现Sender接口,同时做一个工厂类(SendCSDNFactory),实现Provider接口,就可以了,无需去改动现成的代码。从而避免了违背开闭原则.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值