最近公司不是那么忙,抽空复习一下工厂模式加深印象和熟练使用,如果有写的不对的地方希望各位大神指点一二。
本文参考网上写的比较不错的博客和大话设计模式一书,感谢那些无私奉献的大神。好的,不客套了,进入正文:
工厂模式大致分为三种
1.简单工厂
2.工厂方法
3.抽象工厂
简单说一下他们之前的区别和优缺点:
工厂模式描述:定义一个创建其他类实例的类(可能不止一个类,本文中这么描述),被创建的实例们是一个基类的子类。
1.简单工厂
优点:使代码更加简练易读,教容易维护,容易扩展和复用。
缺点:违背开放关闭原则(开放扩展,关闭修改)
2.工厂方法
优点:完全符合开放关闭原则
缺点:每加一个产品就要多一个工厂类和产品类。
3.抽象工厂
优点:完全符合开放关闭原则,基于工厂方法的扩展,对于产品层级复杂的业务下能够轻松解决需求
缺点:每加一个产品就要多一个工厂类和产品类。
使用时根据自己的业务来使用,如逻辑比较简单而且生产的产品不会经常扩展或不修改,建议使用简单工厂。如产品教复杂建议使用工厂方法或抽象工厂,根据自己业务需求使用即可。
接下来详细了解一下各个工厂:
1.简单工厂:
该工厂有三个角色组成:
1.工厂类:用于生产具体产品实例。
2.产品抽象类:产品共性的抽象,用于被实现。
该工厂由四个角色组成:
1.抽象工厂类:工厂共性的抽象,用于被实现。
2.具体工厂类:具体工厂的实现,用于生产对应产品。
3.抽象产品类:产品共性的抽象,用于被实现。
该工厂与工厂方法的角色相同,只不过对产品的多样化有着很好的支持。
在此说明一下产品树和产品族的概念:
1.产品结构树是描述某一产品的物料组成及各部分文件组成的层次结构树状图。它是将产品数据管理中的产品信息,结合各个零部件之间的层级关系,组成一种有效的属性管理结构。
现在有2件衣服,一件是nike的,一件是adidas的,可以属于同一个产品树,同属衣服,可以有不同风格的衣服,树形的层级关系。
而nike的T-shirt,和adidas的T-shirt属于同一个产品族,同属T-shirt,是同一种基于相同产品相关的系列产品,平行关系。
例子是自己想的,每个人的理解方式不同,但本文是自己笔记,不过多描述,如有不理解,自行百度。
本文参考网上写的比较不错的博客和大话设计模式一书,感谢那些无私奉献的大神。好的,不客套了,进入正文:
工厂模式大致分为三种
1.简单工厂
2.工厂方法
3.抽象工厂
简单说一下他们之前的区别和优缺点:
工厂模式描述:定义一个创建其他类实例的类(可能不止一个类,本文中这么描述),被创建的实例们是一个基类的子类。
1.简单工厂
优点:使代码更加简练易读,教容易维护,容易扩展和复用。
缺点:违背开放关闭原则(开放扩展,关闭修改)
2.工厂方法
优点:完全符合开放关闭原则
缺点:每加一个产品就要多一个工厂类和产品类。
3.抽象工厂
优点:完全符合开放关闭原则,基于工厂方法的扩展,对于产品层级复杂的业务下能够轻松解决需求
缺点:每加一个产品就要多一个工厂类和产品类。
使用时根据自己的业务来使用,如逻辑比较简单而且生产的产品不会经常扩展或不修改,建议使用简单工厂。如产品教复杂建议使用工厂方法或抽象工厂,根据自己业务需求使用即可。
接下来详细了解一下各个工厂:
1.简单工厂:
该工厂有三个角色组成:
1.工厂类:用于生产具体产品实例。
2.产品抽象类:产品共性的抽象,用于被实现。
3.产品实例(一个或多个):具体产品,封装各自的实现。
该工厂由四个角色组成:
1.抽象工厂类:工厂共性的抽象,用于被实现。
2.具体工厂类:具体工厂的实现,用于生产对应产品。
3.抽象产品类:产品共性的抽象,用于被实现。
4.产品实例: 具体产品,封装各自的实现。
该工厂与工厂方法的角色相同,只不过对产品的多样化有着很好的支持。
在此说明一下产品树和产品族的概念:
1.产品结构树是描述某一产品的物料组成及各部分文件组成的层次结构树状图。它是将产品数据管理中的产品信息,结合各个零部件之间的层级关系,组成一种有效的属性管理结构。
2.产品族设计基本思想是以产品平台(Platform) 战略为指导, 利用一个通用、成熟的产品平台( Platform) ,针对细分市场中不同客户群的需求,进行产品平台和基于产品平台的相关系列产品设计,以低成本和快速开发周期来满足不同客户的个性化需求。
现在有2件衣服,一件是nike的,一件是adidas的,可以属于同一个产品树,同属衣服,可以有不同风格的衣服,树形的层级关系。
而nike的T-shirt,和adidas的T-shirt属于同一个产品族,同属T-shirt,是同一种基于相同产品相关的系列产品,平行关系。
例子是自己想的,每个人的理解方式不同,但本文是自己笔记,不过多描述,如有不理解,自行百度。