学习工厂模式

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

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

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

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();
	}
}

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值