设计模式——工厂方法模式

定义: 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 便可,不用再从新修改旧的代码!

  

优势

           一、  在工厂方法中,用户只须要知道所要产品的具体工厂,无须关系具体的建立过程,甚至不须要具体产品类的类名。

           二、  在系统增长新的产品时,咱们只须要添加一个具体产品类和对应的实现工厂,无需对原工厂进行任何修改,很好地符合了“开闭原则”。

 缺点

           一、  每次增长一个产品时,都须要增长一个具体类和对象实现工厂,系统中类的个数成倍增长,在必定程度上增长了系统的复杂度,同时也增长了系统具体类的依赖。这并非什么好事。

相关文章
相关标签/搜索