当前位置:   article > 正文

设计模式——工厂方法模式_用factory method模式设计一个电视机工厂: 要求为每种品牌的电视机提供一个子工厂

用factory method模式设计一个电视机工厂: 要求为每种品牌的电视机提供一个子工厂

工厂方法模式

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

工厂方法模式类图

角色: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();

       }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75

总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/222483
推荐阅读
  

闽ICP备14008679号