现在的位置: 首页 > 综合 > 正文

简单工厂模式

2016年01月22日 ⁄ 综合 ⁄ 共 1666字 ⁄ 字号 评论关闭

/*【简单工厂模式】

 *生活中的工厂就是生产产品,而设计模式中工厂是用来生产对象;

 *简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例;

 *简单工厂模式是工厂模式家族中最简单实用的模式;

 */

// =========客户端==========
public class NoFactoryDemo {
	public static void main(String args[]) {
		ClothDoll cd = new ClothDoll();
		System.out.println(cd.getInfo());
		BabieDoll bd = new BabieDoll();
		System.out.println(bd.getInfo());
	}
}

// ==========工厂端==========
// 布娃娃
class ClothDoll {
	public String getInfo() {
		return "我是布娃娃,我怕脏!";
	}
}

// 芭比娃娃
class BabieDoll {
	public String getInfo() {
		return "我是芭比娃娃,我很漂亮";
	}
}

/*

 * 思考:用面向对象的思维思考这个问题, NoFactoryDemo()为调用者(客户端), ClothDoll()为被调用者(服务器端),

 * 客户端直接依赖于服务器端,高耦合性!===========BE CAREFUL========若布娃娃不生产了,生产其他销量好的产品,则客户在new

 * ClothDoll()时就会出问题!客户和工厂的产品具有直接依赖关系,代码耦合性太高,柔韧性不强!!!为了解决这个问题引入了工厂模式!

 * 工厂模式作用:解耦!!

 */

// =========客户端==========
public class FactoryDemo {
	public static void main(String args[]) {
		Doll cd = DollFactory.getInstance("LL");
		Doll ba = DollFactory.getInstance("cloth");
		if (cd != null) {
			System.out.println(cd.getInfo());
		}
		if (ba != null) {
			System.out.println(ba.getInfo());
		}
	}
}

// ==========工厂端==========
// 布娃娃
class ClothDoll implements Doll {
	public String getInfo() {
		return "我是布娃娃,我怕脏!";
	}
}

// 芭比娃娃
class BabieDoll implements Doll {
	public String getInfo() {
		return "我是芭比娃娃,我很漂亮";
	}
}

// 首先将产品抽象到顶层产品接口
interface Doll {
	public abstract String getInfo();
}

// 工厂类;通过工厂模式,使客户依赖于工厂类,而不依赖于产品类
class DollFactory {
	//  该工厂类只负责生产对象,根据条件不同生产不同对象
	public static Doll getInstance(String name) {
		if (name.equals("cloth")) {
			return new ClothDoll();
		} else if (name.equals("babie")) {
			return new BabieDoll();
		} else {
			System.out.println("没有该产品!!!");
			return null;
		}
	}
}

/*

 * 分析: 这样的目的是客户端不会直接用到产品这个对象,若产品发生变化,客户不受影响,

 * 加入工厂模式类,该类只负责生产对象,将这个类通过条件判断生产的是什么产品,去生产不同的对象!

 * 客户端没有用到new对象,而是与“工厂类”和“接口”进行依赖,降低了与产品的耦合性,

 * 这样如果产品发生更改,只需修改服务器端类即可,不用更改客户端!!(转移依赖关系) 

 * 也体现了OO设计原则: 面向接口编程!!!增强了程序的可扩展性!!!

 */

抱歉!评论已关闭.