三、创建型模式——工厂方法模式

2023-12-15 11:47:24

???微信公众号转载,关注微信公众号掌握更多技术动态

---------------------------------------------------------------

注意工厂方法模式中工厂的方法不是静态的

简单工厂模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了开-闭原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

一、具体案例演示

1.产品接口

public interface Sender {  
     public void Send();
 }  

2.具体实现类

public class MailSender implements Sender {  
    @Override  
     public void Send() {  
       System.out.println("this is mailsender!");  
    }  
 }  
public class SmsSender implements Sender {  
   
     @Override  
     public void Send() {  
       System.out.println("this is sms sender!");  
???? }  
 }  

3.工厂接口+工厂方法类

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();  
    }  
}  

4.客户端代码

public class Client {
	 private static Provider p1,p2;
	 private static Sender s1,s2;
	 public static void main(String[] args) {
		p1 = new SendMailFactory();
		s1 = p1.produce();
		p2 = new SendSmsFactory();
		s2 = p2.produce();
	}	
}

客户端持有工厂接口类型静态变量,而实际类型是具体工厂类,然后客户端调用具体工厂类对象的创建具体产品的方法

工厂方法模式和简单工厂模式

1.工厂方法模式通过创建工厂接口的实现类工厂 解决了简单工厂模式如果想要拓展程序,必须对工厂类进行修改的问题。(如果要扩展工厂类,只要再写一个工厂接口的实现类就可以了)

2.如果一个系统确定只用到一个工厂,我们选择使用静态工厂模式

二、Java语言中工厂方法模式的例子

1.Iterable就是具体类的接口,接口中的 iterator()就是工厂方法,而Collection的实现类就是具体的工厂类

这是ArrayList中的iterator()方法可以看出来,它就是一个工厂方法,返还一个具体的Iterator类

COM、EJB、JMS框架中都用到了工厂方法模式

文章来源:https://blog.csdn.net/qq_39403646/article/details/135010876
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。