Laughing

 

简单工厂

意图:(这是工厂方法的,没有给出工厂方法的实现)

    1.定义一个用于创建对象的接口,让子类来决定实例化哪一个类。

    2.工厂方法使一个类的实例化延迟到其子类。

这里我将建立pizza 做出示范。

pizza类://表示pizza 的一些特性。

 

public class pizza

{

    String name;

    void getName(){System.out.println(name);}

}

pizzaStore 类://决定实例化哪一个类。
public class pizzaStore
{
    spf f;  //这是一个用于实例化那一个类  的类的对象,进一步抽象
    public pizzaStore(spf f){this.f=f;}
    public pizza orderPizza(String name)
    {
    return f.createPizza(name); //通过专门的对象来实例化
    }
}

spf 类:

//simplePizzaFactory的缩写,一个专门用来决定实例化那个对象的类。

//当然这里也可以把决定方法写在pizzaStore 这个类里,具体见如下的新pizzaStore;

 

public class spf

{

   pizza createPizza(String name)

   {

  pizza pi=null;

  if(name.equals("liu"))pi=new liu();

  else if(name.equals("ju")) pi=new ju();

  return pi;

   }

}

接下来让我写两个pizza类://简单工厂要做的就是要决定产生下面两个类的那一个对象。
liu:
public class liu extends pizza
{
    public liu(){System.out.println("liu_pizza");}
}
ju:
public class ju extends pizza
{
public ju(){System.out.println("ju_pizza");}
}
接下来写一个测试类:
test:
public class test
{
   public static void main(String[] args)
   {
  spf f=new spf();
  pizzaStore a=new pizzaStore(f);
  pizza pi=a.orderPizza("liu");
   //pi.name="wo shi name";pi.getName();
  pi=a.orderPizza("ju");
   }
}
新的、另外的pizzaStore类://当然上面的测试类就得要重新来写了,这里呵呵了。
public class pizzaStore
{
        public pizza orderPizza(String name)
        {
               pizza pi=null;
               if(name.equals("liu")) pi=new liu();
              else if(name.equals("ju")) pi=new ju();
              return pi;
         }

}

 

 

参与者:

  • 工厂角色(Creator)
    是简单工厂模式的核心,它负责实现创建所有具体产品类的实例。工厂类可以被外界直接调用,创建所需的产品对象。
  • 抽象产品角色(Product)
    是所有具体产品角色的父类,它负责描述所有实例所共有的公共接口。
  • 具体产品角色(Concrete Product)
    继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标。工厂类返回的都是该角色的某一具体产品。

UML图:

 

参考代码:

运动员.java
public interface 运动员 {        
        public void 跑();
        public void 跳();
}

足球运动员.java
public class 足球运动员 implements 运动员 {

        public void 跑(){
                //跑啊跑
        }
        
        public void 跳(){
                //跳啊跳
        }
}

篮球运动员.java
public class 篮球运动员 implements 运动员 {

        public void 跑(){
                //do nothing
        }
        
        public void 跳(){
                //do nothing
        }
}

体育协会.java
public class 体育协会 {
        
        public static 运动员 注册足球运动员(){
                return new 足球运动员();
        }
        
        public static 运动员 注册篮球运动员(){
                return new 篮球运动员();
        }

}

俱乐部.java
public class 俱乐部 {
        private 运动员 守门员;
        private 运动员 后卫;
        private 运动员 前锋;

        public void test() {
                this.前锋 = 体育协会.注册足球运动员();
                this.后卫 = 体育协会.注册足球运动员();
                this.守门员 = 体育协会.注册足球运动员();
                
                守门员.跑();
                后卫.跳();
        }
}

posted on 2011-12-30 09:41  巨富一生  阅读(151)  评论(0编辑  收藏  举报

导航