设计模式(二)--- java中的工厂模式

版权声明:版权归JansonLin所有,转载请标明出处。 https://blog.csdn.net/Janson_Lin/article/details/85054044

工厂模式

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

一、简单工厂模式

试想一下,当我们在写代码的时候,在A类里面只要实例化了一个B类的对象,那么A类就会从某种程度上依赖B类。如果在后期需求发生变化或者是维护的时候,需要修改B类的时候,我们就需要打开源代码修改所有与这个类有关的类了,做过重构的朋友都知道,这样的事情虽然无法完全避免,但确实是一件让人心碎的事情。

使用发邮件和短信的举例

(1)创建发送者接口

public interface Sender {
	public void Send();
}

(2)创建邮件短信实现类

public class MailSender implements Sender {
	@Override
	public void Send() {
		System.out.println("邮件mailsender!");
	}
}
public class SmsSender implements Sender {
	@Override
	public void Send() {
		System.out.println("短信sender!");
	}
}

(3)建立工厂类

public class SendFactory {
	public Sender produce(String type) {
		if ("mail".equals(type)) {
			return new MailSender();
		} else if ("sms".equals(type)) {
			return new SmsSender();
		} else {
			System.out.println("请输入正确的类型!");
			return null;
		}
	}
}

(4)测试

public class FactoryTest {
	public static void main(String[] args) {
		SendFactory factory = new SendFactory();
		Sender sender = factory.produce("sms");
		sender.Send();
	}
}

测试结果

二、工厂方法模式

是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。

修改简单工厂模式的SendFactory

public class SendFactory {
	
	public Sender produceMail(){
		return new MailSender();
	}
	
	public Sender produceSms(){
		return new SmsSender();
	}
}

测试

public class FactoryTest {
	public static void main(String[] args) {
		SendFactory factory = new SendFactory();
		Sender mailSender = factory.produceMail();
		Sender SmsSender = factory.produceSms();
		mailSender.Send();
		SmsSender.Send();
	}
}

三、静态工厂方法

将工厂方法的对象设置为静态,不用实例化,直接调用。

public class SendFactory {
	
	public static Sender produceMail(){
		return new MailSender();
	}
	
	public static Sender produceSms(){
		return new SmsSender();
	}
}

  测试

public class FactoryTest {
	public static void main(String[] args) {
		Sender mailSender = SendFactory.produceMail();
		Sender SmsSender = SendFactory.produceSms();
		mailSender.Send();
		SmsSender.Send();
	}
}

工厂模式总结

工厂模式适合场景:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。

猜你喜欢

转载自blog.csdn.net/Janson_Lin/article/details/85054044