版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Topic:设计模式主要内容 1 什么是设计模式 2 工厂模式 3 抽象工厂模式 4 单例模式 5 装饰模式 6 MVC模式本章目标 掌握设计模式的基本知识 能够写出工厂模式,单例模式,抽象工厂模式和装饰模式框架代码 了解什么是MVC1 什么是设计模式? 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 简而言之,在我们处理大量问题时,在很多不同的问题中重复出现的一种性质,它使得我们可以使用一种方法来描述问题实质并用本质上相同,但细节永不会重复的方法去解决,这种性质
2、就叫模式。模式化过程是把问题抽象化,在忽略掉不重要的细节后,发现问题的一般性质值,并找到普通使用的方法去解决的过程。 整个设计模式贯穿一个原理:面对接口编程,而不是面对实现。目标原则是:降低耦合,增强灵活性。1 什么是设计模式? 关于GoF :(Gang of Four)n Design Patterns: Elements of Reusable Object-Oriented Software(即设计模式),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。这几位作者常被称为“
3、四人组(Gang of Four)”,而这本书也就被称为“四人组(或 GoF)”书。n 在设计模式这本书的最大部分是一个目录,该目录列举并描述了23 种设计模式。另外,近来这一清单又增加了一些类别,最重要的是使涵盖范围扩展到更具体的问题类型。例如,Mark Grand 在 Patterns in Java: A Catalog of Reusable Design Patterns Illustrated with UML(模式 Java 版)中增加了解决涉及诸如并发等问题的模式,而由 Deepak Alur、John Crupi 和 Dan Malks 合著的 Core J2EE Patte
4、rns: Best Practices and Design Strategies 一书中主要关注使用 Java 2 企业技术的多层应用程序上的模式。1 什么是设计模式? GoF的23种设计模式,其中紫色底色白色文字所标示的是应该掌握的设计模式:创建型模式创建型模式Abstract Factory(抽象工厂模式)(抽象工厂模式)Factory Method(工厂模式)(工厂模式)Prototype(原型模式)(原型模式)Singleton(单态模式)(单态模式)Builder(生成器模式)(生成器模式)1 什么是设计模式? 结构型模式结构型模式Adapter(适配器模式)(适配器模式)Comp
5、osite(组合模式)(组合模式)Decorator(装饰模式)(装饰模式)Bridge(桥接模式)(桥接模式)Faade(外观模式)(外观模式)Flyweight(享元模式)(享元模式)Proxy(代理模式)(代理模式)1 什么是设计模式? 行为型模式行为型模式Chain of Responsibility(职责链模式)职责链模式)Interpreter(解释器模式)(解释器模式)Memento(备忘录模式)(备忘录模式)Command(命令模式)(命令模式)Observer(观察者模式)(观察者模式)Mediator(中介者模式)(中介者模式)Iteartor(迭代器模式)(迭代器模式)S
6、trategy(策略模式)(策略模式)TemplateMethod(模板方法模式)(模板方法模式)State(状态模式)状态模式)Visitor(访问者模式)访问者模式)2 工厂模式 Factory Method(工厂方法模式):工厂方法模式又称工厂模式,也叫虚拟构造器模式或者多态工厂模式,属于类的创建型模式。在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中,即由子类来决定究竟应该实例化哪一个类。 工厂模式的要点: 1、存在一个创建对象的工厂; 2、调用者从工厂中取得某些对象; 3、由工厂决定如何创建对象; 4、客户不知道
7、对象是如何生成的。 2 工厂模式 工厂方法模式的UML类图表示:2 工厂模式 2 工厂模式 工厂方法模式实例手机工厂现实中不同品牌的手机应由不同的工厂制造,是一个典型的工厂方法模式。2 工厂模式 手机工厂实现代码:手机接口:public interface Mobile void call();手机工厂接口:public interface MobileFactory Mobile produceMobile();2 工厂模式 摩托罗拉手机实现手机接口:public class Motorola implements Mobilepublic void call() / TODO Auto-g
8、enerated method stubSystem.out.println(摩托罗拉手机);诺基亚手机实现手机接口:public class Nokia implements Mobilepublic void call() / TODO Auto-generated method stubSystem.out.println(诺基亚手机);2 工厂模式 摩托罗拉手机工厂实现生产手机的方法,返回摩托罗拉手机:public class MotorolaFactory implements MobileFactorypublic Mobile produceMobile() System.out
9、.println(摩托罗拉手机工厂制造了);return new Motorola();诺基亚手机工厂实现生产手机的方法,返回诺基亚手机:public class NokiaFactory implements MobileFactorypublic Mobile produceMobile() System.out.println(诺基亚手机工厂制造了);return new Motorola();2 工厂模式 客户端调用程序:public class Client public static void main(String args)MobileFactory mf;Mobile m;m
10、f=new MotorolaFactory();m=duceMobile();m.call();mf=new NokiaFactory();m=duceMobile();m.call();运行结果:摩托罗拉手机工厂制造了摩托罗拉手机诺基亚手机工厂制造了摩托罗拉手机2 工厂模式 优势和缺陷:a. 基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。它能够使工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部。工厂方法模式之所以又被称为多态工厂模式,就正是因为所有的具体工厂类都具有同一抽象父类。b. 使用工厂方法模式的另一个优点是在系统中加
11、入新产品时无需修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改其它的具体工厂和具体产品,而只需要添加一个具体工厂和具体产品就可以了,这样,系统的可扩展性非常的好。优秀的面向对象设计鼓励使用封装和委托来构造软件系统,工厂方法模式这是使用了封装和委托的典型例子,其中封装是通过抽象工厂来体现的,而委托则是通过抽象工厂将创建对象的责任完全交给具体工厂来实现。c. 使用工厂方法模式的缺电是在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,当两者都比较简单时,系统会有相应的额外开销。2 工厂模式 应用场景:u 类不知道自己要创建哪一个对象。u 类用它的子类来指定创建哪个
12、对象。u 客户需要清楚创建了哪一个对象。3 抽象工厂模式 Abstract Factory Pattern(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。 抽象工厂模式与工厂方法模式最大的区别在于:工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则针对的是多个产品等级结构。正因如此,在抽象工厂模式中经常会用到产品族这一概念,它指的是位于不同的产品等级结构中,并且功能相互关联的产品系列。3 抽象工厂模式 抽象工厂模式的UML类图表示:声明生成抽象产品的方法执行生成抽象产品的方法,生成一个具体产品为一种产品
13、声明接口定义具体工厂生成的具体产品的对象,实现产品接口应用程序,使抽象产品和抽象工厂生成对象3 抽象工厂模式3 抽象工厂模式 抽象工厂模式实例电脑产品IBM,Dell都是著名的计算机生产厂家,他们采用的主板、硬盘及CPU是不相同的,但配件间、主板与CPU一定要相互兼容,例如下面例子中的微星MSIK7N2G配AMD的CPU;微星MSI865PE配Intel的CPU。3 抽象工厂模式 电脑产品类图如下:3 抽象工厂模式CPU接口:public interface CPU String getCPU();AMD类,实现CPU接口:public class AMD implements CPU pub
14、lic String getCPU() return Athlon xp 2800+;Intel类,实现CPU接口:public class Intel implements CPU public String getCPU() return P4 3.2G;3 抽象工厂模式硬盘接口:public interface HardDisk String getSize();Maxtor类,实现硬盘接口:public class Maxtor implements HardDisk public String getSize() return MaxLine Plus II 200G;WestDig
15、it类,实现硬盘接口:public class WestDigit implements HardDisk public String getSize() return WD2500JD 250G;3 抽象工厂模式主板接口:public interface MainBoard void Attach(CPU cpu) throws Exception;MSI865PE类,实现主板接口:public class MSI865PE implements MainBoard public void Attach(CPU cpu) throws Exception if (cpu.getClass()
16、.toString().endsWith(Intel)System.out.println(MSI865PE);elsethrow new Exception(主板MSI865PE只能配Intel的CPU);3 抽象工厂模式MSIK7N2G类,实现主板接口:public class MSIK7N2G implements MainBoard public void Attach(CPU cpu) throws Exception if (cpu.getClass().toString().endsWith(AMD)System.out.println(MSIK7N2G);elsethrow n
17、ew Exception(主板MSIK7N2G只能配AMD的CPU);3 抽象工厂模式定义抽象电脑工厂类:public abstract class ComputerFactory CPU cpu;HardDisk hd;MainBoard mb;public void show()trySystem.out.println(this.getClass().getName().toString()+生产的电脑配置);System.out.println(CPU:+cpu.getCPU();System.out.println(HardDisk:+hd.getSize();System.out.
18、print(MainBoard:);mb.Attach(cpu);catch(Exception e)System.err.println(e.getMessage();3 抽象工厂模式抽象电脑工厂类派生类Dell,定义其返回的系列配件产品:public class Dell extends ComputerFactory Dell()cpu=new AMD();hd=new Maxtor();mb=new MSIK7N2G();抽象电脑工厂类派生类IBM,定义其返回的系列配件产品:public class IBM extends ComputerFactory IBM()cpu=new In
19、tel();hd=new WestDigit();mb=new MSI865PE();3 抽象工厂模式客户端:public class Client public static void main(String args) / TODO Auto-generated method stubIBM ibm=new IBM();ibm.show();Dell dell=new Dell();dell.show();运行结果:test.IBM生产的电脑配置CPU:P4 3.2GHardDisk:WD2500JD 250GMainBoard:MSI865PEtest.Dell生产的电脑配置CPU:At
20、hlon xp 2800+HardDisk:MaxLine Plus II 200GMainBoard:MSIK7N2G3 抽象工厂模式 优势和缺陷:a. 抽象工厂模式的主要优点是隔离了具体类的生成,使得客户端不需要知道什么被创建。b. 抽象工厂模式的最大好处是,当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族的对象。这对一些需要根据当前环境来决定其行为的软件系统来说,是非常实用的一种设计模式。c. 抽象工厂模式的缺电是,在添加新的产品对象时,难以扩展抽象工厂以便生产新种类产品。这是因为AbstractFactory接口规定了所有可能被创建的产品集合,要支持新
21、种类的产品就意味着要对该接口进行扩展,而这将涉及到对AbstractFactory及其所有子类的修改,显然有小小的不便,但不重要。3 抽象工厂模式 应用场景:u 系统需要屏蔽有关对象如何创建、如何组织和如何表示。u 系统需要由关联的多个对象来构成。u 有关联的多个对象需要一起应用并且它们的约束是强迫的(不可分离)。u 你想提供一组对象而不显示它们的实现过程,只显示它们的接口。4 单例模式 Singleton(单例模式):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类,它提供全局访问的方法。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行
22、创建这个实例;三是它必须自行向整个系统提供这个实例。提供一个instance的方法,让客户可以使用的唯一实例。内部实现只生成一个实例4 单例模式public class Logger private static Logger logger=new Logger();private Logger()public static Logger getIns()return logger;public void debug(String msg)/.4 单例模式 单例模式实例系统日志私有静态类型的实例,在第一次使用时实例化。私有类型的构造函数,不允许用户实例化。普通静态方法,返回实例。客户端调用方式
23、:public class Clientpublic static void main(String args) Logger.getIns().debug(调试信息.);4 单例模式4 单例模式 优势和缺陷:单例模式为一个面向对象的应用程序提供了对象唯一的访问点,不关它实现何种功能,此种模式都为设计及开发团队提供了共享的概念。然而,Singleton对象类派生子类就有很大的困难,只有在父类没有被实例化时才可以实现。值得注意的是,有些对象不可以被做成Singleton,比如.Net的数据库连接对象(Connnection),整个应用程序共享一个Connection对象会出现连接池溢出错误。另外
24、,不管.Net还是Java,都提供了自动废物回收的技术,因此,如果实例化的对象长时间不被利用,系统会人为它是废物,自动消灭它的资源,下次利用时又会被重新实例化,这种情况下应注意其状态的丢失问题。4 单例模式 应用场景:u 系统只需要一个实例的对象。u 客户调用类的单个实例只允许使用一个公共访问点。5 装饰模式 Decorator Pattern(装饰模式):动态的給一个对象增加其职责,就增加对象功能来说,装饰模式比生成子类实现更灵活。定义对象的接口,可以給这些对象动态增加职责(方法)。定义具体的对象,Decorator可以給它增加额外的职责(方法)。维护一个内有的Component,并且定义一
25、个与Component接口一致的接口。具体的装饰对象,給内在的具体部件对象增加具体的职责(方法)。 装饰模式的UML类图表示:5 装饰模式5 装饰模式 装饰模式实例自定义JButton当应用Java AWT或Swings组件设计用户接口,开发人员通常需要更多有特色的控件,Decorator模式就提供了一个方法去创造或修改现有的UI控件。假定我们现在需要一个带对角线的按钮,其最简单的类图如下:5 装饰模式public class CustomJButton extends JComponent private static final long serialVersionUID = 1L;pro
26、tected JComponent child;public CustomJButton(JComponent component)child=component;this.setLayout(new BorderLayout();this.add(child);component.addFocusListener(new FocusAdapter()public void focusGained(FocusEvent fe)repaint(););public void paint(Graphics g)super.paint(g);int height=this.getHeight();i
27、nt width=this.getWidth();g.setColor(Color.red);g.setFont(new Font(,Font.BOLD,2);g.drawLine(0, 0, width, height); 实例代码客户端调用方式:public class Test extends JFrameprivate static final long serialVersionUID = 1L;public static void main(String args) new Test().setVisible(true);public Test()setSize(400,200);
28、getContentPane().setLayout(new FlowLayout();getContentPane().add(new CustomJButton(new JButton(Save);5 装饰模式运行结果:5 装饰模式 优势和缺陷:u 装饰模式提供了比静态继承更好的柔韧性,它允许开发一系列的功能类用来代替增加对象的行为,这既不会污染原来对象的源码,还能使代码更容易编写,使类更具有扩展性,因为变化都由新的装饰类来完成。还可以建立连接的装饰对象关系链。u 需要注意的是,关系链不易过长。关系链太长会是系统花费较长时间用于初始化对象,同时信息在链中的传递也会浪费太多的时间。这种情况好比物品包装,包了一层又一层,大包套小包。另外,如果原来的对象接口发生变化,它所有的装饰类都要修改以匹配它的变化。派生子类会影响对象的内部,而一个Decorator只会影
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版公司合作保密协议范文
- 2024物流行业数据安全保护协议
- 二零二五年度SET支付系统改造及加密技术集成协议3篇
- 专属贷款担保事务代理协议2024一
- 2025年拆除施工安全协议及施工人员心理健康关爱责任书3篇
- 2025年度旅游度假区场地租赁与旅游产品开发协议4篇
- 2025年农业科技园区场地合作经营协议书4篇
- 科技礼仪在商务中的应用
- 两人合伙买房协议书标准版
- 2025年度茶叶品牌授权经营合同书4篇
- 割接方案的要点、难点及采取的相应措施
- 2025年副护士长竞聘演讲稿(3篇)
- 2025至2031年中国台式燃气灶行业投资前景及策略咨询研究报告
- 原发性肾病综合征护理
- 第三章第一节《多变的天气》说课稿2023-2024学年人教版地理七年级上册
- 2025年中国电科集团春季招聘高频重点提升(共500题)附带答案详解
- 2025年度建筑施工现场安全管理合同2篇
- 建筑垃圾回收利用标准方案
- 2024年考研英语一阅读理解80篇解析
- 样板间合作协议
- 福建省厦门市2023-2024学年高二上学期期末考试语文试题(解析版)
评论
0/150
提交评论