java23设计模式之——抽象工厂模式(Abstract Factory)

本文详细介绍了抽象工厂模式的概念、实现步骤及其实现案例,通过具体实例展示了如何利用抽象工厂模式解决类创建依赖问题,并在不修改现有代码的基础上拓展功能。通过增加发送即时消息的功能,演示了抽象工厂模式带来的灵活性和便利性。

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

工厂方法模式有一个问题就是,类的创建依赖于工厂类,拓展程序的话,必须修改现有的工厂类,这违背了闭包原则。抽象工厂模式,创建多个工厂类,一旦有新的功能,则只需要创建新的对象类,同时创建对应的工厂类即可。

定义发送接口

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
怎么样,感觉有点意思吧,欢迎各位大侠互相讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值