Java设计模式之二 —— 工厂方法

      1.问题的提出

      有一家工厂生产的产品Product分为两类,一类是飞机ProductA,一类是汽车ProductB。我们希望在实际生产的过程中由具体的构造器来实例化我们的ProductA和ProductB。

 

      2.设计类图

      3.代码实现

      首先,我们需要定义一个Product接口,用来表示工厂生产的产品。

 

public interface Product
{
     public void printProduct();
}

 

      由于我们的工厂即生产飞机ProductA又生产汽车ProductB,于是我们让ProductA和ProductB实现Product接口:

      1.飞机产品 —— ProductA:

 

public class ProductA implements Product
{
     public void printProduct()
    {
         System .out.println( "ProductA" );
    }
}

 

      2.汽车产品 —— ProductB:

 

public class ProductB implements Product
{
     public void printProduct()
    {
         System .out.println( "ProductB" );
    }
}

 

      接下来,我们需要一个构造器 —— 工厂方法,用来构建Product产品:

 

public interface ProductCreator
{
     public Product factorymethod();
}

 

      有了产品构造器的接口之后,我们需要分别实现两个类,用来构建ProductA和ProductB:

      1.飞机产品构造器 —— ProductCreatorA:

 

public class ProductCreatorA implements ProductCreator
{
     public Product factorymethod()
    {
         return new ProductA();
    }
}

 

      2.汽车产品构造器 —— ProductCreatorB:

 

public class ProductCreatorB implements ProductCreator
{
     public Product factorymethod()
    {
         return new ProductB();
    }
}

 

      4.客户端实现

      我们写一个Client来测试我们的工厂方法:

 

public class Client
{
     public static void main( String [] args)
    {
         //定义一个飞机产品构造器
        ProductCreator productCreatorA = new ProductCreatorA();
         //定义一个汽车产品构造器
        ProductCreator productCreatorB = new ProductCreatorB();

         //构造飞机产品
        Product productA = productCreatorA.factorymethod();
         //构造汽车产品
        Product productB = productCreatorB.factorymethod();

         //控制台输出飞机产品内容
        productA.printProduct();
         //控制台输出汽车产品内容
        productB.printProduct();
    }
}

 

      运行结果如下:

 

      5.总结 —— 趣味见解

      可见,工厂类不再负责进行对象的构建,而将每个对象的构建任务分配给相应的实现类。也就是说存在一个类,就存在一个相应类的构造器。

      通常我请一群朋友去吃麻辣烫,每个人的口味都不一样,我一个跟服务员说的麻烦,我直接用FactoryMethod方法来解决。跟服务员说:“每一个人一份麻辣烫。”至于要什么样的让每个人自己跟服务员说去。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值