設計模式之工廠模式

設計模式之工廠模式

1、概述

    1.1 簡介

        工廠模式是咱們最經常使用的實例化對象模式了,是用工廠方法代替new操做的一種模式。由於工廠模式就至關於建立實例對象的new,咱們常常要根據類Class生成實例對象。咱們在new大量同類時,儘可能使用工廠模式,可以提升解耦和可擴展性。java

2、實例

    2.1 同類

接口

public interface Sender {

	public void Send();
}

類1

public class SmsSender implements Sender {

	@Override
	public void Send() {
		System.out.println("this is sms sender!");
	}

}

類2

public class MailSender implements Sender {

	@Override
	public void Send() {
		System.out.println("this is mailSender");

	}

}

    2.2 普通工廠

public class CommonFactory {

	/**
	 * @see 不一樣工廠類。輸入名稱
	 * @param type
	 * @return
	 */
	public Sender produce(String type) {
		if ("mail".equals(type)) {
			return new MailSender();
		} else if ("sms".equals(type)) {
			return new SmsSender();
		} else {
			System.out.println("right type inside,place!");
			return null;
		}
	}
}

    2.3 多個工廠

public class MultiFactory {

	/**
	 * @See 多個工廠方法
	 * @see 缺點:若是須要添加新的方法,則須要修改源碼
	 */
	public Sender produceMail() {
		return new MailSender();
	}

	public Sender produceSms() {
		return new SmsSender();
	}

	// 靜態工廠
	public static Sender produceMailTwo() {
		return new MailSender();
	}

	public static Sender produceSmsTwo() {
		return new SmsSender();
	}
}

    2.4 抽象工廠

// 工廠接口
public interface Provider {

	/**
	 * @see 工廠接口、每個新的類只須要建立一個實現一個工廠接口
	 * @return
	 */
	Sender produce();
}
//每個基類都實現一個工廠
public class SmsFactory implements Provider {

	@Override
	public Sender produce() {
		return new SmsSender();
	}

}
public class MailFactory implements Provider {

	@Override
	public Sender produce() {
		return new MailSender();
	}

}

    2.5 使用

public static void main(String[] args) {
		// 1.普通:經過名字來實現。須要擴展必須修改源碼
		// CommonFactory cf = new CommonFactory();
		// Sender sender = cf.produce("sms");
		// sender.Send();
		// 2.工廠方法:須要擴展必須修改源碼
		// MultiFactory mf = new MultiFactory();
		// Sender sender = mf.produceMail();
		// sender.Send();
		// 3.靜態工廠方法:須要擴展必須修改源碼
		// Sender sender = MultiFactory.produceMailTwo();
		// sender.Send();
		// 4.抽象工廠方法:須要擴展直接建立一個工廠接口的工廠(這個用法和行爲模式比較相似)
		Provider provider = new SmsFactory();
		Sender sender = provider.produce();
		sender.Send();
	}
}
相關文章
相關標籤/搜索