JAVA系列-设计模式-抽象工厂模式

抽象工厂模式的理解:用抽象工厂来定义具体工厂的抽象,而由具体工厂来创建对象

我们以创建一个动物打比喻:

用抽象动物工厂(IAnimalFactory)来定义具体动物工厂的抽象(ICat、IDog),而由具体的动物工厂(BlackCat、BlackDog、WhiteCat、WhiteDog)来创建动物,这就是抽象工厂与工厂方法的不同,工厂方法中对象的创建是由工厂方法来确定的,创建的对象都是不分类并且实现一个接口的,而抽象工厂就是在工厂方法的基础上对创建动物的对象的行为进行分类,比如黑色动物工厂,白色动物工厂等。

代码:

package AbstractFactory;

public interface IAnimalFactory {

    ICat createCat();
	
    IDog createDog();
}

package AbstractFactory;

public class BlackAnimalFactory implements IAnimalFactory  {

	public ICat createCat() {
		// TODO Auto-generated method stub
		return new BlackCat();
	}

	public IDog createDog() {
		// TODO Auto-generated method stub
		return new BlackDog();
	}
}

package AbstractFactory;

public class BlackCat implements ICat {

	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("The black cat is eating!");
	}

}

package AbstractFactory;

public class BlackDog implements IDog {

	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("The black dog is eating!");
	}
}

package AbstractFactory;

public interface ICat {
	 void eat();
}

package AbstractFactory;

public interface IDog {
	 void eat();
}

package AbstractFactory;

public class WhiteAnimalFactory implements IAnimalFactory{

	public ICat createCat() {
		// TODO Auto-generated method stub
		return new WhiteCat();
	}

	public IDog createDog() {
		// TODO Auto-generated method stub
		return new WhiteDog();
	}
	
}

package AbstractFactory;

public class WhiteCat implements ICat {

	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("The white cat is eating!");
	}

}

package AbstractFactory;

public class WhiteDog implements IDog {

	public void eat() {
		System.out.println("The white cat is eating!");
	}
}

package AbstractFactory;

/**
 * 抽象工厂模式
 * 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
  	适用性
    1.一个系统要独立于它的产品的创建、组合和表示时。
    2.一个系统要由多个产品系列中的一个来配置时。
    3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
    4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。

 * @author Administrator
 *
 */
public class Test {
	public static void main(String args[]){
		IAnimalFactory blackAnimalFactory = new BlackAnimalFactory();
	    ICat blackCat = blackAnimalFactory.createCat();
	    blackCat.eat();
	    IDog blackDog = blackAnimalFactory.createDog();
	    blackDog.eat();
	    
	    //
	    IAnimalFactory whiteAnimalFactory = new WhiteAnimalFactory();
	    ICat whiteCat = whiteAnimalFactory.createCat();
	    whiteCat.eat();
	    IDog whiteDog = whiteAnimalFactory.createDog();
	    whiteDog.eat();
	}
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值