首页 > 关于工厂模式(三)

关于工厂模式(三)

又重头想了一下



还是以配电脑为例

最开始的时候,需要电脑,你得自己去生产电脑的每一个组件,例如你要cpu 就得自己生产cpu 要主板就得自己生产主板。

于是出现


简单工厂模式

在简单工厂模式中,定义一个返回接口,然后所有的组件实例都从这个工厂中产生

例:



工厂---------生产硬件

硬件----------

cpu------硬件的子类

主板------硬件的子类



当我需要某种组件的时候,直接告诉工厂,我需要的硬件名字,然后工厂就会生产一个我需要的硬件给我,这里,我不用去知道工厂中是怎么生产的,他可以自己生产,也可以找别的工厂代工,与我无关,我只需要找这个工厂要硬件就行了。



工厂类

public class Factory

{

public IHardware Produce(int type)

{

swicth(type)

{

case 0:

return new Cpu();

break;

case 1:

return new Motherboard();

break;

Default:

return null;

break;

}

}

}



硬件接口

public Interface IHardware

{

}



具体类CPU



public Cpu implements IHardware

{

}



具体类主板

public Motherboard implements IHardware

{

}

使用时,只需要一个工厂,然后找那个工厂生产实例就行了

Factory factory=new Factory();

IHardware cpu=factory.Produce(0);

IHardware motherboard=factory.Produce(1);


缺点
  由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。 
  当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利; 
  这些缺点在工厂方法模式中得到了一定的克服。 
  使用场景 
  工厂类负责创建的对象比较少; 
  客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心; 
  由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。

 

工厂方法模式应该和抽象工厂模式说的是同一个东东

那就还是用配电脑来重新理解一下

例如,原本只有一种cpu,一种主板,后来出现了很多种cpu和主板,这时使用这个工厂就会很麻烦,因为每次有新的类型出来,我都得去修改这个工厂

于是就出现了抽象工厂模式

这个理解上还有点问题,在代码中再考虑吧只需要知道它在哪里用到

工厂方法模式的应用

  工厂方法经常用在以下两种情况中: 

  第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。Java Collection中的iterator() 方法即属于这种情况。 

  第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。

先这样吧

转载于:https://www.cnblogs.com/meieiem/archive/2012/01/31/2332611.html

更多相关:

  • 简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。 本文是本人对这三种模式学习后的一个小结以及对他们之间的区别的理解。   简单工厂 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。...

  • 简介 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。 不同点 为了更清晰地理解抽象工厂模式,需要先引入两个概念:产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是CPU,其子类有intel...

  • 工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。 区别:...