1. 程式人生 > >設計模式(二)--- java中的工廠模式

設計模式(二)--- java中的工廠模式

工廠模式

簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(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();
	}
}

工廠模式總結

工廠模式適合場景:凡是出現了大量的產品需要建立,並且具有共同的介面時,可以通過工廠方法模式進行建立。在以上的三種模式中,第一種如果傳入的字串有誤,不能正確建立物件,第三種相對於第二種,不需要例項化工廠類,所以,大多數情況下,我們會選用第三種——靜態工廠方法模式。