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

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

定义发送接口

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值