设计模式系列2--工厂方法模式

本文介绍了工厂方法模式的应用,通过创建具体工厂来生产不同类别的产品,解决了传统工厂模式的局限性。示例展示了如何为不同品牌的汽车建立独立的生产线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工厂方法模式,解决了 工厂模式中,需要增加或者删除产品 必须修改 工厂类的弊端。

把生产产品扔给具体的工厂, 因为 每个产品都对应一个工厂。


主要组成部分:

1   Car  定义了所有产品(这里是汽车)的共有熟悉,    汽车必须有引擎

public abstract class Car {
 
 public abstract void eingee();

}


2  汽车有很多品牌  比如 宝马  朗逸

    2.1 定义 宝马

     public class BmwCar extends Car {
 
 public BmwCar()
 {
  System.out.println("宝马哦");
 }

 @Override
 public void eingee() {
  System.out.println("宝马引擎");
  
 }

}


 2.2 定义 朗逸


public class AudiCAR extends Car {

 public  AudiCAR()
 {
  System.out.println("朗逸哦,是 上海大众工厂生产");
 }
 
 @Override
 public void eingee() {
  
  System.out.println("朗逸的引擎");

 }

}



3  好了 , 我需要什么产品 已经定义好了  我们现在需要 建工厂了

   先定义一个 所有工厂 必须要实现的功能, 生产汽车!  必须的


public interface CarFactory {
 
   public Car getCar();

}


4  有2个品牌的汽车 我们需要建2个生产线(工厂)

  4.1  北京奔驰汽车厂

    public class BjFactory implements CarFactory {
 
 
 public BjFactory()
 {
  System.out.println("北京奔驰戴克 接到订单");
 }

 @Override
 public   Car getCar() {
  
  return new BmwCar();
 }
 
 

}


4.2  上海大众汽车厂


public class ShangHaiFactory implements CarFactory {
 
  public ShangHaiFactory()
  {
  
   System.out.println("上海大众 收到订单");
  }

 @Override
 public Car getCar() {
  
   return new  AudiCAR();
 
 }

}


  


5   客户


public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
 
      //需要 买宝马520
         CarFactory bjFactory=new BjFactory();
         Car bm520=bjFactory.getCar();
         bm520.eingee();
        
          //需要买 朗逸
         CarFactory shangHaiFactory=new ShangHaiFactory();
         Car lavida=shangHaiFactory.getCar();
         lavida.eingee();
 }

}


结果:


       北京奔驰戴克 接到订单
宝马哦
宝马引擎
上海大众 收到订单
朗逸哦,是 上海大众工厂生产
朗逸的引擎



6 如果以后  要生产 北京212 怎么办


没关系,  只需要 增加一个 产品类

    public class  bj20 extends Car {
 
 public  bj20()
 {
  System.out.println("北京吉普212 不是以前的 vj2020");
 }

 @Override
 public void eingee() {
  System.out.println(" 北京制造出品的bj20 是国产引擎 哎 ");
  
 }

}


再盖一个工厂(生产线)

     public class Bj212Factory implements CarFactory {
 
 
 public Bj212Factory()
 {
  System.out.println("北京制造  伟利达经销商 发来订单");
 }

 @Override
 public   Car getCar() {
  
  return new bj20();
 }
 
 

}

    


  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值