设计模式——工厂方法模式

工厂方法模式

**定义:*定义一共用于创建对象的接口,让子类决定将哪个类实例化,工厂方法模式使一个类的实例化延迟到其子类。

工厂方法模式类图

角色:1.抽象产品(Product)2.抽象工厂(Factory)3.具体产品(ConcreteProduct)4.具体工厂(ConcreteProduct)
在这里插入图片描述
与简单工厂类似,不过将工厂类抽象化,这样做的好处是使得客户端只需要关心抽象产品和抽象工厂,完全不用理会返回的是哪一种具体产品,也无需关心是如何被具体工厂创建的,同时在新增一个产品时,只需要添加一共具体工厂和具体产品即可。这样满足开闭原则。缺点是可能会产生大量的类,增加系统的开销。
优点:
 (1)工厂方法模式减轻了工厂类的负担,把某一类/某一种东西指定一个工厂进行生产使得每个工厂职责清晰;
 (2)当要增加某一类”东西“并不需要修改工厂类,只需要增加这类”东西“的工厂即可,符合开放-封闭原则。
缺点:
(1)由于每增加一个产品就得相应的增加工厂,对于某些可以形成产品族的情形,不便于代码可扩展和可维护

实战题目

将原有的工厂进行分割,为每种品牌的电视机提供一个子工厂, 海尔工厂专门负责生产海尔电视机, 海信工厂专门负责生产海信电视机, 如果需要生产TCL电视机或创维电视机,只需要对应增加一个新的TCL工厂或创维工厂即可,原有的工厂无须做任何修改,使得整个系统具有更加的灵活性和可扩展性。绘制类图并给出完整代码及运行结果。

分析题目,说明采用的设计模式是什么?

可以看出原来的工厂变为了一个创建对象的接口,而TCL电视厂、海尔工厂作为子类决定了具体的生产产品,所以该设计模式为工厂方法模式。

绘制类图,说明其中的角色及作用

Client依赖与电视工厂与电视产品两个抽象类,两个抽象类分别由两个具体类来实现
在这里插入图片描述

public interface TVFactory

{    public TV produceTV();}

public class HaierTVFactory  implements TVFactory

{    public TV produceTV()

    {         System.out.println("海尔电视机工厂生产海尔电视机。");

          return new HaierTV();

    }

}

public class HisenseTVFactory implements TVFactory

{    public TV produceTV()

    {         System.out.println("海信电视机工厂生产海信电视机。");

                   return new HisenseTV();

    }

}

public interface TV

{     public void play();}

public class HaierTV implements TV

{     public void play()

       {

              System.out.println("海尔电视机播放中......");

       }

}

public class HisenseTV implements TV

{     public void play()

       {

              System.out.println("海信电视机播放中......");

       }    

}

public class Client

{     public static void main(String args[])

       {  

              TV tv;

         TVFactory factory;

         factory=new HaierTVFactory();

         tv=factory.produceTV();

         tv.play();

       }

}

总结

工厂方法模式主要新增了抽象工厂,和简单工厂不同的是,将创建对象的职责交给客户端(new 对应的工厂类),而简单工厂则是传一个参数,工厂类根据参数返回产品

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
工厂方法模式是一种常见的创建型设计模式,它定义了一个用于创建对象的接口,但是由类决定要实例化的类是哪一个。在工厂方法模式中,创建对象的过程被分离出来,使得这个过程可以被类定制化,从而提高了代码的可扩展性和可维护性。 工厂方法模式的核心思想是将对象的创建和使用分离开来,客户端只需要知道所需对象的类型,而无需关心对象的创建过程。具体来说,工厂方法模式包含以下几个角色: 1. 抽象工厂(Abstract Factory):定义了工厂方法的接口,用于创建产品对象。 2. 具体工厂(Concrete Factory):实现抽象工厂接口,根据具体需求创建具体产品对象。 3. 抽象产品(Abstract Product):定义了产品的接口,用于描述产品的属性和行为。 4. 具体产品(Concrete Product):实现抽象产品接口,提供具体的实现。 使用工厂方法模式可以将客户端代码和具体产品的实现代码分离开来,使得代码更加灵活和可扩展。工厂方法模式在实际应用中也有很多场景,例如: 1. 当一个类不知道它所必须创建的对象的类的时候。 2. 当一个类希望由它的类来指定所创建的对象的时候。 3. 当类将创建对象的职责委托给多个帮助类中的某个特定类,并且希望能够在运行时切换这些类中的哪一个时。 总之,工厂方法模式是一种非常实用的设计模式,可以提高代码的可维护性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值