設計模式——工廠方法模式

定義: java

工廠方法模式是簡單工廠模式的延伸。在工廠方法模式中,核心工廠類不在負責產品的建立,而是將具體的建立工做交給子類去完成。也就是後所這個核心工廠僅僅只是提供建立的接口,具體實現方法交給繼承它的子類去完成。當咱們的系統須要增長其餘新的對象時,咱們只須要添加一個具體的產品和它的建立工廠便可,不須要對原工廠進行任何修改,這樣很好地符合了「開閉原則」。app

示例代碼:ide

Fruit.javaui

package com.designPattern.factoryMethod;

/***
 * 
 * @author liuzhihu
 *
 */
public interface Fruit {

	/***
	 * 定義吃水果的方法
	 */
	public void eatFruit();

}

 

Apple.java對象

package com.designPattern.factoryMethod;

/***
 * 
 * @author liuzhihu
 *
 */
public class Apple implements Fruit {

	@Override
	public void eatFruit() {

		System.out.println("吃蘋果  ......");

	}

}

 

Banana.javablog

package com.designPattern.factoryMethod;

/***
 * 
 * @author liuzhihu
 *
 */
public class Banana implements Fruit {

	@Override
	public void eatFruit() {

		System.out.println("吃香蕉 ......");

	}

}

  

FruitFactory.java繼承

package com.designPattern.factoryMethod;

public abstract class FruitFactory {

	/***
	 * 採集水果
	 * 
	 * @param type
	 * @return
	 */
	public abstract Fruit getFruit();

}

  

AppleFactory.java接口

package com.designPattern.factoryMethod;

public class AppleFactory extends FruitFactory {

	@Override
	public Fruit getFruit() {

		System.out.println("採摘蘋果");

		return new Apple();

	}
}

  

BananaFactory.javaget

package com.designPattern.factoryMethod;

public class BananaFactory extends FruitFactory {

	@Override
	public Fruit getFruit() {

		System.out.println("採摘香蕉");

		return new Banana();

	}
}

 

MainTest.java產品

package com.designPattern.factoryMethod;

/***
 * 工廠方法模式
 * 
 * @author liuzhihu
 *
 */
public class MainTest {

	public static void main(String[] args)
			throws ClassNotFoundException, InstantiationException, IllegalAccessException {

		AppleFactory appleFactory = new AppleFactory();

		Fruit apple = appleFactory.getFruit();

		apple.eatFruit();

		BananaFactory bananaFactory = new BananaFactory();

		Fruit banana = bananaFactory.getFruit();

		banana.eatFruit();

	}

}

  

以上代碼,若是想要再添加一種水果,那麼實現一下Fruit.java與FruitFactory.java 便可,不用再從新修改舊的代碼!

  

優勢

           一、  在工廠方法中,用戶只須要知道所要產品的具體工廠,無須關係具體的建立過程,甚至不須要具體產品類的類名。

           二、  在系統增長新的產品時,咱們只須要添加一個具體產品類和對應的實現工廠,無需對原工廠進行任何修改,很好地符合了「開閉原則」。

 缺點

           一、  每次增長一個產品時,都須要增長一個具體類和對象實現工廠,系統中類的個數成倍增長,在必定程度上增長了系統的複雜度,同時也增長了系統具體類的依賴。這並非什麼好事。

相關文章
相關標籤/搜索