创建者模式

当我们使用抽象工厂时,在客户端进行调用的时候,如果产品的类别比较多,那么此时工厂返回的实例对象将会很多。

客户端得代码将会大大增加,这将不利于程序的可读性。为了解决此类问题,可以把所有实例的创建放在一个类中去生成,

这样在客户端只需要调用这个创建者类,大大减少客户端的代码量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值