菜鸟硕枫设计模式系列之4 抽象工厂模式

抽象工厂方法模式是用途最广的方法模式之一,其主要思想是利用工厂生产组合的复杂实例组,由于工厂、不同的实例组中实例一般都抽象为接口层次,所以很方便添加不同的具体工厂和不同的实例组。主要用于创建一系列相关的对象组或是其他方面。

抽象工厂方法模式类图:

[img]http://dl.iteye.com/upload/attachment/364524/5c72b240-b5e1-3407-a99a-eeeb0379a50b.jpg[/img]


具体实例demo:
建造工厂:

package abstractFactory;

public interface CreatorFactory {

Food getFoodInstance();

Fruit getFruitInstance();
}


具体工厂1:

package abstractFactory;

public class ConcreteCreatorFactory1 implements CreatorFactory{

public Food getFoodInstance() {
return new Bread();
}

public Fruit getFruitInstance() {
return new Apple();
}

}


具体工厂2:

package abstractFactory;

public class ConcreteCreatorFactory2 implements CreatorFactory{

public Food getFoodInstance() {
return new Egg();
}

public Fruit getFruitInstance() {
return new Pear();
}

}



对象接口:


package abstractFactory;

public interface Food {

String getFoodName();
}



package abstractFactory;

public interface Fruit {

String getFruitName();
}


具体对象:

package abstractFactory;

public class Apple implements Fruit{

@Override
public String getFruitName(){
// TODO Auto-generated method stub
return "This is apple";
}

}




package abstractFactory;

public class Bread implements Food{

@Override
public String getFoodName() {
// TODO Auto-generated method stub
return "This is Bread which always comes out with Apple.";
}

}



package abstractFactory;

public class Egg implements Food{

@Override
public String getFoodName() {
// TODO Auto-generated method stub
return "This is Bread which always comes out with Apple.";
}

}



package abstractFactory;

public class Pear implements Fruit {

@Override
public String getFruitName() {
// TODO Auto-generated method stub
return "This is pear";
}

}


测试类:

package abstractFactory;

public class AbstractFactoryDemo {

public static void main(String[]args){
CreatorFactory fac=new ConcreteCreatorFactory1();
System.out.println("ConcreteCreatorFactory1 Instance generate the following Instances");
System.out.println(fac.getFoodInstance().getFoodName());
System.out.println(fac.getFruitInstance().getFruitName());

fac= new ConcreteCreatorFactory2();
System.out.println("ConcreteCreatorFactory2 Instance generate the following Instances");
System.out.println(fac.getFoodInstance().getFoodName());
System.out.println(fac.getFruitInstance().getFruitName());
}
}


说明:Food接口对应类 Egg Bread;Fruit接口对应类Apple Pear.具体工厂1负责创建Bread或是Apple实例;具体工厂2负责创建Egg或是Pear实例。这样的话 如果只需要Bread或是Apple实例,就可以只用具体工厂1去实现;要另外一组的话 只需要用具体工厂2去创建。而对抽象工厂来说,它不需要关注那一个具体工厂去实现。这样的话就有了更高层次的封装,也满足了开闭原则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值