设计模式之简单工厂模式

单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。

1.工厂(Creator)角色 简单工厂模式的核心,它负责实现创建全部实例的内部逻辑。工厂类能够被外界直接调用。创建所需的产品对象。
2.抽象(Product)角色 简单工厂模式所创建的全部对象的父类,它负责描写叙述全部实例所共同拥有的公共接口


3.详细产品(Concrete Product)角色 简单工厂模式所创建的详细实例对象

优缺点:

在这个模式中。工厂类是整个模式的关键所在。它包括必要的推断
逻辑,能够依据外界给定的信息,决定到底应该创建哪个详细类的
对象。

用户在使用时能够直接依据工厂类去创建所需的实例,而无
需了解这些对象是怎样创建以及怎样组织的。有利于整个软件体系
结构的优化。
不难发现,简单工厂模式的缺点也正体如今其工厂类上,因为工厂类集中
了全部实例的创建逻辑。所以“高内聚”方面做的并不好。另外,当系统中的
详细产品类不断增多时,可能会出现要求工厂类也要做对应的改动,扩展
性并不非常好。


public class Apple implements Fruit{
	/*
	 * 採集
	 */
	public void get(){
		System.out.println("採集苹果");
	}
}

public class Banana implements Fruit{
	
	public void get(){
		System.out.println("採集香蕉");
	} 



public class FruitFactory {
//	/*
//	 * 获得Apple类的实例
//	 */
//	public static  Fruit getApple() {
//		return new Apple();
//	}
//	
//	/*
//	 * 获得Banana类实例
//	 */
//	public static Fruit getBanana() {
//		return new Banana();
//	}
	/*
	 * get方法,获得全部产品对象
	 */
	public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
//		if(type.equalsIgnoreCase("apple")) {
//			return Apple.class.newInstance();
//			
//		} else if(type.equalsIgnoreCase("banana")) {
//			return Banana.class.newInstance();
//		} else {
//			System.out.println("找不到对应的实例化类");
//			return null;
//		}
			Class fruit = Class.forName(type);
			return (Fruit) fruit.newInstance();
		
		
	}
}

}


public interface Fruit {
	/*
	 * 採集
	 */
	public void get();
}


public class MainClass {
	public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
//		//实例化一个Apple
//		Apple apple = new Apple();
//		//实例化一个Banana
//		Banana banana = new Banana();
//		
//		apple.get();
//		banana.get();
		
//		//实例化一个Apple,用到了多态
//		Fruit apple = new Apple();
//		Fruit banana = new Banana();
//		apple.get();
//		banana.get();
		
//		//实例化一个Apple
//		Fruit apple = FruitFactory.getApple();
//		Fruit banana = FruitFactory.getBanana();
//		apple.get();
//		banana.get();
		
		Fruit apple = FruitFactory.getFruit("Apple");
		Fruit banana = FruitFactory.getFruit("Banana");
		apple.get();
		banana.get();
		
	}
}


原文地址:https://www.cnblogs.com/ldxsuanfa/p/10000546.html