论坛首页 Java企业应用论坛

学习工厂模式

浏览 1732 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-26   最后修改:2008-12-05

今天了解了工厂模式,总结下:

      首先是简单工厂模式,大家在开发中经常用到,感觉就是在类里面增加一些静态方法,这个类就是工厂类,以后调用这些方法时不用实例化此类。

一个例子,动物有吃,喝的功能,写个动物接口。

public interface Animal {

	public void eat();
	
	public void drink();
}

 

猫,狗继承动物,就有了这两个功能。

public class Cat implements Animal {
	public void drink() {	

	}
	public void eat() {
	
	}
}

 

public class Dog implements Animal {
	public void drink() {		
	}

	public void eat() {

	}
}

 宠物店可以提供这两种动物

public class PetShop {
	public static Dog dogAdopt(){
		return new Dog();
	};	
	public static Cat catAdopt(){
		return new Cat();
	};
}

 这个类就是静态工厂类。

人们可以通过此类进行领养动物。

public class People {

	private Cat whitecat;
	private Cat blackcat;
	
	public void test(){
		this.whitecat=PetShop.catAdopt();
		this.blackcat=PetShop.catAdopt();
		
		whitecat.drink();
		blackcat.eat();
	}
}

 可以领养白猫,或者黑猫,并且也具有吃喝的功能。

此例说了下静态工厂类。

如果宠物店还需要增加动物品种怎么办,就要在静态工厂类增加动物品种,如老虎。这样就不能面向接口编程

 

工厂方法模式就可以改变这些。

修改PetShop.java

public interface PetShop {

	public Animal animalAdopt();
	
}

 增加的品种都可以继承这个类

public class DogAdopt implements PetShop {
               //返回狗的实例,领养狗
	public Animal animalAdopt() {

		return new Dog();
	}

}

 

public class CatAdopt implements PetShop {
//返回猫的实例领养猫
	public Animal animalAdopt() {		
		return new Cat();
	}

}

 

这里也可以增加老虎的实例,进行领养。只将接口(宠物点)暴露给用户。至于增加什么品种,用户不知道。用户只用知道自己想要的。

public class People {
	private Cat whitecat;
	private Cat blackcat;	
	public void test(){
		CatAdopt a = new CatAdopt();
		this.whitecat= (Cat) a.animalAdopt();
		this.blackcat=(Cat) a.animalAdopt();		
		whitecat.drink();
		blackcat.eat();
	}
}

 

写这些只为学习,有理解错误的地方请批评

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics