设计模式之抽象工厂模式

在上一篇中介绍了工厂模式,其中静态方法模式是效果比较好的.


现在需求变了,要在添加一个动物,猪.那就需要改代码了.


先加入猪这个类.

public class Pig extends Animal {

	@Override
	public void eat() {
		System.out.println("猪吃");
	}

}

然后在原来的静态方法工厂上添加一个方法


public class AnimalFactory3 {

	public static Animal createDog() {
		return new Dog();
	}

	public static Animal createCat() {
		return new Cat();
	}

	// new
	public static Animal createPig() {
		return new Pig();
	}
}

然后以后要是再来动物,就再在这个类里面加方法.

这样好像违反了开闭原则,对修改关闭,,

.所以不应该修改,用其他的方法..




把工厂给抽象出来,具体使用哪个工程,就new哪个,工厂也实现了单一原则.


public abstract class AnimalFactory {
	public abstract Animal createAnimal();
}

public class CatFactory extends AnimalFactory {

	@Override
	public Animal createAnimal() {
		return new Cat();
	}

}

public class DogFactory extends AnimalFactory{

	@Override
	public Animal createAnimal() {
		return new Dog();
	}

}

public class PigFactory extends AnimalFactory{

	@Override
	public Animal createAnimal() {
		return new Pig();
	}

}

	@Test
	public void test4() {
		AnimalFactory factory = new CatFactory();
		Animal a = factory.createAnimal();
		a.eat();

		factory = new DogFactory();
		a = factory.createAnimal();
		a.eat();

		factory = new PigFactory();
		a = factory.createAnimal();
		a.eat();

	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值