欢迎来到天天文库
浏览记录
ID:40200038
大小:219.50 KB
页数:11页
时间:2019-07-25
《创建型模式(简单工厂,工厂方法,抽象工厂)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、创建型模式之我见创建型模式(CreationalPattern)是对类的实例化过程进行了抽象,能够使的软件模块做到与对象的创建和组织无关。为了使体系结构更加清晰,外界对于这些对象只知道他们的共同接口,而不需要清楚具体的实现细节。从而体现面向对象编程中的精髓----面向接口编程。SimpleFactoryPattern(简单工厂)专门定义一个类来负责创建其他的类的实例。被创建的实例通常都是具体的共同父类。简单工厂模式有称为静态工厂方法模式,属于类的创建型模式。通常它根据自变量的不同返回不同的类的实例。简单工厂模式实质使由一个工厂类根据传入的参量,动
2、态决定要创建出哪个产品的实例。简单工厂本不属于23个GOF模式但它可以作为GOF的工厂方法模式的一个引导。现实中的例子-----国旗生产厂国旗有个共性,都是四方布做的,四方布就是他们的基础类,中国国旗,美国国旗,韩国国旗等等都是从四方布中-派生出来的。国旗生产厂就是一个简单工厂。根据客户的需求,生产不同的国旗。四方布(基类)中国国旗日本国旗韩国国旗国旗生产厂家根据客户的需求案例:在线支付类型(银行卡,信用卡),手机销售(诺基亚,摩托罗拉)优势与缺陷在简单工厂模式中,工厂类是整个模式的关键所在。根据外界给定的信息,决定要创建具体的对象。摆脱了传统的
3、外界直接创建具体产品的局面(自给自足实现),直接由工厂来决定。优点能够使客户端独立于产品的创建过程,并且在系统中引入新产品时,无需对客户端进行修改,缺点,当新产品进来时必须修改工厂类。但是对于简单工厂的确定也正是体现到在工厂类上。由于所有的实例都在这里创建,从而使的工厂类变的巨大,违反了高内聚的责任分配原则。应用场景:1.工厂类负责创建的对象比较少。2.客户只知道传入工厂类的参数,对于如何创建对象不用关心。FactoryMethodPattern工厂方法模式工厂方法模式又称为工厂模式,也叫虚拟构造器模式或者多态工厂模式,属于类的创建型模式。在工厂
4、方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成的具体对象。这样做的目的是将类的实例化过程操作延迟到子类中完成。即由子类来决定究竟应该实例化哪个类。其实在工厂模式就已经应用了单例模式,从始不到终它就只有一个工厂,单例模式不需要新建实例.(在后面补充单例模式中说明)现实例子—兵工厂兵工厂战斗机器兵工厂战斗机器案例:扩展手机例子。优势与缺陷:工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了那种具体产品类将实例化的细节。工厂方法模式的核心是一个抽象工厂类,各种具体的工厂类通过抽象工厂将工厂方法继承下来。如此使得客户可以只
5、关心抽象产品和抽象工厂,完全不用理会返回是哪一种具体的产品。而不用关心具体的如何创建。使用工厂方法模式的另一个优点是在系统中加入新产品的时候,无许修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改其他具体的工厂和具体的产品,而只需要添加一个具体的工厂和具体的产品就可以了。扩展性好点。工厂方法模式在面向对象设计中使用了封装和委托来构造典型应用。封装通过抽象工厂实现,委托通过抽象工厂将创建的对象责任完全交给具体工厂来体现。缺点:在增加新产品的时候,需要编写具体的产品类,同时还需要提供与之对应的具体工厂类。应用场景:1.类不知道自己要创建哪一
6、个对象。2.类用它的子类来指定创建哪个对象。3.客户需要清楚创建哪一个对象。AbstractFactoryPattern抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,抽象工厂模式又称Kit模式属于对象创建型模式。抽象工厂与工厂方法模式的区别在于:工厂方法模式针对是一个产品等级结构,而抽象工厂模式是针对多个产品等级结构。抽象工厂设计到产品簇概念。生活中的例子----兵工厂的扩展兵工厂士兵战斗机扩展后的兵工厂兵工厂战斗机器士兵案例:北大青鸟体系,军人服务社。优势和缺陷:抽象工厂模式的主要优点是隔离了具体类的生成,使得
7、客户不需要知道什么被创建了。由于这样隔离,更换一个具体工厂就变的相对容易。所有的具体工厂都实现了抽象工厂中定义的那些公共接口,因此只需要改变具体工厂的实例,所有的具体工厂都实现了抽象工厂中定义的那些公共接口。从而可以实现高内聚,低偶合。应用情景:1.系统需要屏蔽有关对象如何创建、如何组织如何表示。2.系统需要由关联的多个对象来构成。3.有关联的多个对象需要一起应用并且他们的约束是强迫的(不可分离)4.你想提供一组对象而不显示他们的实现过程,只显示他们的接口。补充单例模式 1.单例的目的是什么? 保证一个类只有单一的实例,也就是说你无法通过New
8、或CreateInstance来创建这个类的一个新实例。(并且唯一只有一个类的实例对象) 2.单例的好处在哪里? 当一个对象在程序内
此文档下载收益归作者所有