工厂方法模式有一个问题就是,类的创建依赖于工厂类,拓展程序的话,必须修改现有的工厂类,这违背了闭包原则。抽象工厂模式,创建多个工厂类,一旦有新的功能,则只需要创建新的对象类,同时创建对应的工厂类即可。
定义发送接口
public interface Sender{
public void Send();
}
其次,创建两个实现类,分别实现发送邮件和短信
public class MailSender implenments Sender(){
@override
public void send(){
System.out.println("this is a mail sender");
}
}
public class SmsSender implenments Sender(){
@override
public void send(){
System.out.println("this is a sms sender");
}
}
然后,创建一个借口类,定义produce方法,用于子类实现创建对象
public
interface
Provider {
public
Sender produce();
}
接着,针对两个对象类,分别创建两个工厂类
public
class
SendMailFactory
implements
Provider {
@Override
public
Sender produce(){
return
new
MailSender();
}
}
public
class
SendSmsFactory
implements
Provider {
@Override
public
Sender produce(){
return
new
SmsSender();
}
}
测试类
public class
FactoryTest(){
public static void main(String [] args){
SendFactory factory = new SendMailFactory();
Sender sender = factory.produce();
sender.sender();
}
}
抽象工厂模式的好处在于如果这时候需要增加一个发送及时消息的功能,不需要修改现有的工厂类,只需要重新创建一个实现类InsMegSender,实现
Sender接口,同时创建一个工厂类,实现Provider借口即可。
新添加发送即时消息的类
public class InsMegSender implenments Sender(){
@override
public void send(){
System.out.println("this is a InsMeg sender");
}
}
新添加即时消息的工厂类
public
class
SendInsMegFactory
implements
Provider {
@Override
public
Sender produce(){
return
new
InsMegSender();
}
}
测试类
public class FactoryTest(){
public static void main(String [] args){
SendFactory factory = new SendInsMegFactory();
Sender sender = factory.produce();
sender.sender();
}
}
输出:
this is a InsMeg sender
怎么样,感觉有点意思吧,欢迎各位大侠互相讨论