当我们使用抽象工厂时,在客户端进行调用的时候,如果产品的类别比较多,那么此时工厂返回的实例对象将会很多。
客户端得代码将会大大增加,这将不利于程序的可读性。为了解决此类问题,可以把所有实例的创建放在一个类中去生成,
这样在客户端只需要调用这个创建者类,大大减少客户端的代码量。
1,所有动物类的接口
package joeho.net.csdn.blog.Builder;
public interface Animal {
public void eat();
}
2,老虎类
package joeho.net.csdn.blog.Builder;
public class Tiger implements Animal{
public void run() {
System.out.println("老虎会跑");
}
public void eat() {
System.out.println("老虎会吃");
}
}
3,海豚类
package joeho.net.csdn.blog.Builder;
public class Doiphin implements Animal{
public viod swim() {
System.out.println("海豚会游泳");
}
public void eat() {
System.out.println("海豚会吃");
}
}
4,鹦鹉类
package joeho.net.csdn.blog.Builder;
public class Parrot implements Animal {
public void fly() {
System.out.println("鹦鹉会飞");
}
public void eat() {
System.out.println("鹦鹉会吃");
}
}
5,亚洲老虎类继承自老虎类
package joeho.net.csdn.blog.Builder;
public class AsiaTiger extends Tiger{
public void run() {
System.out.println("亚洲老虎会跑");
}
public void eat() {
System.out.println("亚洲老虎会吃");
}
}
6,亚洲海豚类继承自海豚类
package joeho.net.csdn.blog.Builder;
public class AsiaDoiphin extends Doiphin {
public viod swim() {
System.out.println("亚洲海豚会游泳");
}
public void eat() {
System.out.println("亚洲海豚会吃");
}
}
7,亚洲鹦鹉类继承自鹦鹉类
package joeho.net.csdn.blog.Builder;
public class AsiaParrot extends Parrot {
public void fly() {
System.out.println("亚洲鹦鹉会飞");
}
public void eat() {
System.out.println("亚洲鹦鹉会吃");
}
}
8,非洲老虎类继承自老虎类
package joeho.net.csdn.blog.Builder;
public class AfricaTiger extends Tiger{
public void run() {
System.out.println("非洲老虎会跑");
}
public void eat() {
System.out.println("非洲老虎会吃");
}
}
9,非洲海豚类继承自海豚类
package joeho.net.csdn.blog.Builder;
public class AfricaDoiphin extends Doiphin {
public viod swim() {
System.out.println("非洲海豚会游泳");
}
public void eat() {
System.out.println("非洲海豚会吃");
}
}
10,非洲鹦鹉类继承自鹦鹉类
package joeho.net.csdn.blog.Builder;
public class AfricaParrot extends Parrot {
public void fly() {
System.out.println("非洲鹦鹉会飞");
}
public void eat() {
System.out.println("非洲鹦鹉会吃");
}
}
11,抽象工厂类
package joeho.net.csdn.blog.Builder;
public interface AnimalFactory {
public Tiger creatTiger () ;
public ParrotcreatParrot() ;
public DoiphincreatDoiphin() ;
}
12,具体工厂类
package joeho.net.csdn.blog.Builder;
public class AsiaAnimalFactory implements AnimalFactory {
public Tiger creatTiger (){
return new AsiaTiger();
}
public Parrot creatParrot(){
return new AsiaParrot();
}
public DoiphincreatDoiphin() {
return new AsiaDoiphin();
}
}
public class AfricaAnimalFactory implements AnimalFactory {
public Tiger creatTiger (){
return new AfricaTiger();
}
public Parrot creatParrot(){
return new AfricaParrot();
}
public DoiphincreatDoiphin() {
return new AfricaDoiphin();
}
}
..............
.............
12,组装类
package joeho.net.csdn.blog.Builder;
public class Builder {
private AnimalFactory factory;
public Builder(AnimalFactory factory){
this.factory = factory;
}
public void creatAsiaAnimal (){
AsiaTiger tiger = factory.creatTiger();
tiger.eat();
AsiaDoiphin doiphin= factory.creatTDoiphin();
doiphin.swim();
.......
}
public void creatAfricaAnimal (){
AfricaTiger tiger = factory.creatTiger();
tiger.eat();
AfricaDoiphin doiphin= factory.creatTDoiphin();
doiphin.swim();
.......
}
}
5,客户端调用代码
Builder bdr= new Builder (new AsiaAnimalFactory () );
bdr.creatAsiaAnimal ();
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/joeho/archive/2010/01/21/5219015.aspx