


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、常用GoF设计模式-1为了实现别离,一般需要从“纵向、“横向、“核心和外围三个不同的方面进行仔细地地 分析和考虑。对于纵向进行别离,常用的处理方法是“分层策略,或者某些框架技术。对于同一层中各个组件类之间的横向关联关系的别离,常用的处理方法是使用“桥模式。对于核心功能模块和将要扩展的外围模块之间的别离,常用的处理方法是使用“装饰器模 式。1.根本概念1.1 GoF设计模式展示的设计原那么GoF设计模式展示了如何处理各种变化, 使代码获得最大的可重用性。主要表达以下3种设 计谋略。针对接口编程,而不是针对具体的实现类编程。优先使用对象组合,而不是类的继承技术。将系统中的“可变局部和“不可变局部别
2、离,封装变化点。1.2 GoF设计模式分为几大泛型创立型模式创立型模式涉及对象实例化时使用的各种模式,有以下几种:1工厂方法Factory Method2抽象工厂Abstract Factory3原型Prototyoe4生成器Builder 5单例Singleton结构型模式结构型模型主要描述系统中的类和对象应该怎样结合以构成更大的结构,有以下几种:1门面1Facade2代理1Proxy3适配器Adapter4组合1Composite5装饰1Decorator6桥Bridge 7享元1Flyweight行为型模式行为型模式主要用来封装变化,有以下几种:1模版Template2备忘录Mement
3、o3观察者Observer4解释器Interpreter5职责链Cha in of Respo nsibility6命令Comma nd7迭代器Iterator8中介Mediator9访问者Visitor10状态State11 丨策略Strategy2.几个常用模式2.1单例模式Singletoninstance ; Singleton*Singleton() *getlnstance() 其它方法()Sin gleton类定义了一个getI nsta nee操作,允许客户端访问它的唯一实例。get In sta nee是个静态方法,主要负责创立自己的一个唯一实例。代码如下:public cl
4、assSin glet on in sta neeprivate staticSin glet onprivateSin glet on() /构造方法为“私有,阻止了外界用new创立本类实例的可能public static synchroni zedSin glet on get In sta nce() /仓 U建单例if (instanee=null)in sta nee= new Si ngleto n();returnin sta nee;其它方法();【例1】一般对于门面类,需要用单例模式创立它的实例,即在系统中门面类实例只能有 一个。对于生成订单的如下类图:orderMcinii
5、gdnlerfaceorderMa nageBeanI6DAOfJilonDAO门両接实现类pro duceOne Orderl ifo()UserinfoCRUDlntoftaccUserinfoCRU DimpleGoodslinfoCRU DI nnpteGoodsInfoCR UDIriterrace为门面接口和门面类命名后的类图为:UAOServicelnt efface关于门面类“ DAOServicelmple的代码如下:=n ull;=nullpublic class DAOServicelmplepublic Userl nfoDAOl nterfacepublicGoods
6、l nfoDAOl nterfaceimpleme ntsDAOService In terfaceon eUserl nfoDAOImpleon eGoodsl nfoDAOImpleprivate staticDAOServicel nterfaceon eDAOService In sta neenullprivate DAOServiceImple()/ 构造方法public staticsynchroni zedDAOService In terface getl nsta nce()if ( oneDAOServiceInstanee= null )on eDAOService I
7、n sta nee= new DAOServiceImple();returnon eDAOService In sta nee;/单例方法public Orderl nfoPOproduce On eOrderl nfo(Stri ngregisterUserlD,/ 一揽子包干门面方法on eUserl nfoDAOImple= new Userl nfoDAOImple();on eGoodsl nfoDAOImple= new Goodsl nfoDAOImple。;Userl nfoPO on eUserl nfoPO =Stri nggoodsID)on eUserl nfoDAO
8、Imple.select On eUserl nfo(registerUserlD);Goodsl nfoPO on eGoodsl nfoPO =on eGoods In foDAOImple.select On eGoods In fo(goodslD);Orderl nfoPO on eOrderl nfoPO =new Orderl nfoPO();on eOrderl nfoPO.setGoodsName(o neGoodsl nfoPO.getGoodsName();on eOrderl nfoPO.setGoodsPrice(o neGoodsl nfoPO.getGoodsPr
9、ice();on eOrderl nfoPO.setUserName(o neUserl nfoPO.getUserName(); returnon eOrderl nfoPO;客户端类“ orderManageBeaS调用门面,产生订单,代码如下:public class orderMa nageBea npublicOrderl nfoPO createOrder()String registerUserlD ="1"String goodsID ="1"/以下为用单例模式创立门面类实例:getI nsta nee()DAOServiceI nter
10、faceon eDAOServiceBean = DAOServicelmple./以下为产生一个订单:OrderI nfoPO on eOrderI nfoPO =on eDAOServiceBea duce On eOrderI nfo(registerUserlD, goodsID);returnon eOrderI nfoPO;2.2工厂方法如果有这样的上下调用关系:代码如下:效劳端:public class ABC业务方法public void method() /客户端:public class XYZprivate ABC abc ; public void work(
11、)abc = new ABC();调用效劳类的业务方法abc .method。;/客户端和效劳端是紧密耦合的用接口隔离客户端和效劳端XYZ*work()*mc3)ABC*niethod<代码如下:效劳端:public in terfaceABCI nterface /接口public void method();实现类public class ABC impleme nts ABCI nterface / public void method()客户端:public class XYZabc ; / 这里依赖接口private ABCI ntefacepublicvoid work()a
12、bc=new ABC(); /abc.method(); /但是在创立接口实例时,任然依赖实现类 调用效劳类的业务方法客户端和效劳端任然是紧密耦合的,要用“工厂类“的“工厂方法来解决用工厂方法创立对象实例,客户端依赖工厂方法,不再直接依赖实现类引入工厂类后的类图:6ABCInterfaceABCInterfacemethodOFactoryABCgetABC()methkodO代码如下:效劳端:public in terface ABCI nteface /接口public void method。; /业务方法public class ABC impleme nts ABCI nteface
13、 / 实现类public void method() 工厂:public class Factory / 工厂类public ABC getABC() / 工厂方法ABC abc = new ABC();return abc;工厂类的简写形式:public class Factorypublic ABC getABC() return new ABC();依赖接口客户端: public class XYZ private ABCInterface abc ; /private Factory factorypublicvoid work()factory = newFactory();abc=
14、 factory.getABC(); /abc.method();/依赖工厂类,用工厂类创立接口的实例调用效劳类的业务方法2.2.4 简单工厂模式考察上述工厂类:public class Factorypublic ABC getABC()return new ABC();Factory负责创立ABC的实例,ABC类就相当于产品,Factory是工厂,生产产品,这是 个专门生产ABC实例的工厂。如下类图中把ABC和它的接口名改写成Product和Productlnteface:6(interface6(interface工厂类的代码也改为如下:public class Factorypubli
15、c Product getProduct ()return new Product();这是一个专门生产Product的工厂思考问题1:如果产品变为多个,怎么办?即:有多种产品都实现了 ProductInteface接口,如何处理?类图变为如下:Factory*getProduct(String productname)ProdjcHnterfaco所有产品和产品接口组成一个“产品群代码如下:效劳端产品群: 产品接口如果在接口这个抽象类中需要包含属性数据,那么将接口改为抽象类 Abstract publicin terfaceProduct In terfacepublic void meth
16、od。;衣服产品public class Clothesimpleme ntsProduct In terfacepublic void method。裤子产品public class Trousers impleme nts Product In terfacepublic void method()(4) 帽子产品public class Cap implements ProductInterface public void method()工厂类:【方法一】public class Factorypublic ProductInterface getProduct(String prod
17、uctname) ProductInterface product =null ;if (productname = "clothes" ) product = new Clothes();if (productname = "trousers" )product = new Trousers();if (productname = "cap" )product = new Cap();return product;要生产哪种产品,需要告诉工厂,即给工厂方法传递一个参数“ productname ,工厂方法 变为有参数的方法。工厂类不
18、管是生产一种产品, 还是生产几种产品,都只有一个工厂, 这种工厂叫“简单工厂客户端:public class XYZ privateProductInterfaceproductprivateFactory factoryJpublicvoid work()factory = new Factory();product = factory .getProduct( "clothes" ); product .method();生产产品的名称必须由客户指定,本例是“ clothes,客户端代【方法二】 或者,工厂类中写 3 各方法,每个方法创立一个产品,这样去掉“产品参数 码中也相应修改,代码如下:工厂类:public class Factorypublic ProductInterface getClothes() / 生产衣服return new Clothes();public ProductInterface getTrousers() / 生产裤子return new Trousers();public ProductInterface getCap() / 生产帽子retu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校德育工作经验及案例分享
- 外贸合同风险防范与法律条款解析
- 互联网公司技术团队管理经验总结
- 高中语文文言文重点句子翻译
- 城市绿化管护工作实施方案
- 初三学生个人简历与自我介绍
- 美元债券项目投资建议书范例
- 小微企业会计实务教学课件
- 物业后勤综合保障服务工作方案
- 项目招标书编写技巧与模板
- 2025至2030中国红辣椒油树脂行业发展趋势分析与未来投资战略咨询研究报告
- 高校内部审计整改方案和整改措施
- 点滴教育培训课件
- NB-T 11499-2024 石墨制无机有焰合成器
- 2025春季学期国开电大专科《管理学基础》一平台在线形考(形考任务一至四)试题及答案
- 奇正藏药消痛贴膏培训
- 《肺癌早期筛查与干预》课件
- 洗护行业数据分析
- 牙膏级磷酸氢钙装置生产工艺流程介绍
- 部编版小学五年级语文下册非连续性文本阅读训练(含答案)
- 2025年中国移动初级解决方案经理学习考试题库大全-上(单选题)
评论
0/150
提交评论