版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、题型:选择题30分,程序填空题60分,模式编程10。*设计模式的关键元素包括以下四个方面:模式名称 (Pattern name) 问题 (Problem) 解决方案 (Solution) 效果 (Consequences) *常用的描述设计模式的格式有:意图、动机、适用性、结构(模式动机、模式定义、模式结构、模式分析、模式优缺点、模式适用环境)*设计模式的两大主题是系统复用与系统拓展。*常用的面向对象设计原则包括7个,这些原则并不是孤立存在的,它们相互依赖,相互补充:*创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。*结
2、构型模式是描述如何将类对象结合在一起,形成一个更大的结构,结构模式描述两种不同的东西:类与类的实例。故可以分为类结构模式和对象结构模式。*行为型模式描述类或对象如何交互及如何分配职责,它主要涉及通过合理的处理方法,达到使系统升级性和维护性提高的目的。1. 简单工厂模式:又称为静态工厂方法(Static Factory Method)模式,根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式属于创建型模式。 简单工厂模式包含如下角色:Factory:工厂角色Product:抽象产品角色ConcreteProduct:具体
3、产品角色public abstract class AbstractPay /抽象支付类 public abstract void pay(); public class CashPay extends AbstractPay /具体支付类 public void pay() /现金支付处理代码 public class CreditcardPay extends AbstractPay /具体支付类 public void pay() /信用卡支付处理代码 public class PayMethodFactory /支付工厂 public static AbstractPay getPay
4、Method(String type) if(type.equalsIgnoreCase(cash) return new CashPay(); /根据参数创建具体产品 else if(type.equalsIgnoreCase(creditcard) return new CreditcardPay(); /根据参数创建具体产品 实例一:简单电视机工厂某电视机厂专为各知名电视机品牌代工生产各类电视机,当需要海尔牌电视机时只需要在调用该工厂的工厂方法时传入参数“Haier”,需要海信电视机时只需要传入参数“Hisense”,工厂可以根据传入的不同参数返回不同品牌的电视机。现使用简单工厂模式来模
5、拟该电视机工厂的生产过程。2. 工厂方法模式(Factory Method Pattern):又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。工厂方法模式属于类创建型模式。工厂方法模式包含如下角色:Product:抽象产品ConcreteProduct:具体产品Factory:抽象工厂ConcreteFactory:
6、具体工厂public abstract class PayMethodFactory /抽象工厂类 public abstract AbstractPay getPayMethod();public class CashPayFactory extends PayMethodFactory /具体工厂类 public AbstractPay getPayMethod() return new CashPay(); public abstract class AbstractPay /抽象支付类 public abstract void pay(); public class CashPay e
7、xtends AbstractPay /具体支付类 public void pay() /现金支付处理代码 PayMethodFactory factory; /客户类代码片段AbstractPay payMethod;factory=new CashPayFactory();payMethod =factory.getPayMethod();payMethod.pay(); 实例一:电视机工厂将原有的工厂进行分割,为每种品牌的电视机提供一个子工厂,海尔工厂专门负责生产海尔电视机,海信工厂专门负责生产海信电视机,如果需要生产TCL电视机或创维电视机,只需要对应增加一个新的TCL工厂或创维工厂即
8、可,原有的工厂无须做任何修改,使得整个系统具有更加的灵活性和可扩展性。3. 抽象工厂模式(Abstract Factory Pattern):称为Kit模式,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式属于对象创建型模式。抽象工厂模式包含如下角色:AbstractFactory:抽象工厂ConcreteFactory:具体工厂AbstractProduct:抽象产品Product:具体产品public abstract class AbstractFactory /抽象工厂类的典型代码 public abstract AbstractProductA cre
9、ateProductA(); public abstract AbstractProductB createProductB();public class ConcreteFactory1 extends AbstractFactory /具体工厂类的典型代码 public AbstractProductA createProductA() return new ConcreteProductA1(); public AbstractProductB createProductB() return new ConcreteProductB1(); 实例一:电器工厂一个电器工厂可以产生多种类型的
10、电器,如海尔工厂可以生产海尔电视机、海尔空调等,TCL工厂可以生产TCL电视机、TCL空调等,相同品牌的电器构成一个产品族,而相同类型的电器构成了一个产品等级结构,现使用抽象工厂模式模拟该场景。4. 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。基本工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝原型自己来实现创建过程。原型模式是一种对象创建型模式。原型模式包含如下角色:Prototype:抽象原型类ConcretePrototype:具体原型类Client:客户类public cl
11、ass PrototypeDemo implements Cloneable /示例代码 public Object clone()Object object = null;try object = super.clone(); catch (CloneNotSupportedException exception) System.err.println(Not support cloneable);return object; *浅克隆(Shallow Clone):当原型对象被复制时,只复制它本身和其中包含的值类型的成员变量,而引用类型的成员变量并没有复制。*深克隆(Deep Clone)
12、:除了对象本身被复制外,对象所包含的所有成员变量也将被复制。实例一:邮件复制(浅克隆) 由于邮件对象包含的内容较多(如发送者、接收者、标题、内容、日期、附件等),某系统中现需要提供一个邮件复制功能,对于已经创建好的邮件对象,可以通过复制的方式创建一个新的邮件对象,如果需要改变某部分内容,无须修改原始的邮件对象,只需要修改复制后得到的邮件对象即可。使用原型模式设计该系统。在本实例中使用浅克隆实现邮件复制,即复制邮件(Email)的同时不复制附件(Attachment)。邮件复制(浅克隆):邮件复制(深克隆):5. 单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,
13、而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。单例模式包含如下角色:Singleton:单例public class Singleton /单例模式的实现代private static Singleton instance=null; /静态私有成员变量/私有构造函数private Singleton() /静态公有工厂方法,返回唯一实例public static Singleton getInstance()if(instance=null) instance=new Singleton();return instance;实例
14、一:身份证号码在现实生活中,居民身份证号码具有唯一性,同一个人不允许有多个身份证号码,第一次申请身份证时将给居民分配一个身份证号码,如果之后因为遗失等原因补办时,还是使用原来的身份证号码,不会产生新的号码。现使用单例模式模拟该场景。实例二:打印池在操作系统中,打印池(Print Spooler)是一个用于管理打印任务的应用程序,通过打印池用户可以删除、中止或者改变打印任务的优先级,在一个系统中只允许运行一个打印池对象,如果重复创建打印池则抛出异常。现使用单例模式来模拟实现打印池的设计。饿汉式单例类:懒汉式单例类:6. 适配器模式(Adapter Pattern) :将一个接口转换成客户希望的另
15、一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。类适配器:对象适配器:适配器模式包含如下角色:Target:目标抽象类Adapter:适配器类Adaptee:适配者类Client:客户类public class Adapter extends Adaptee implements Target /典型的类适配器代码public void request()specificRequest();public class Adapter extends Target /典型的对象适配器代码privat
16、e Adaptee adaptee;public Adapter(Adaptee adaptee)this.adaptee=adaptee;public void request()adaptee.specificRequest(); 实例一:仿生机器人实例二:在为某学校开发教务管理系统时,开发人员发现需要对学生成绩进行排序和查找,该系统的设计人员已经开发了一个成绩操作接口ScoreOperation,在该接口中声明了排序方法Sort(int) 和查找方法Search(int, int),为了提高排序和查找的效率,开发人员决定重用现有算法库中的快速排序算法类QuickSortClass和二分查
17、找算法类BinarySearchClass,其中QuickSortClass的QuickSort(int)方法实现了快速排序,BinarySearchClass的BinarySearch (int, int)方法实现了二分查找。由于某些原因,开发人员已经找不到该算法库的源代码,无法直接通过复制和粘贴操作来重用其中的代码;而且部分开发人员已经针对ScoreOperation接口编程,如果再要求对该接口进行修改或要求大家直接使用QuickSortClass类和BinarySearchClass类将导致大量代码需要修改。现使用适配器模式设计一个系统,在不修改已有代码的前提下将类QuickSortCl
18、ass和类BinarySearchClass的相关方法适配到ScoreOperation接口中。算法库重用结构图7. 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。桥接模式包含如下角色:Abstraction:抽象类RefinedAbstraction:扩充抽象类Implementor:实现类接口ConcreteImplementor:具体实现类public interface Implementor /典型的实现类接口代码public v
19、oid operationImpl(); public abstract class Abstraction /典型的抽象类代码protected Implementor impl;public void setImpl(Implementor impl)this.impl=impl;public abstract void operation(); public class RefinedAbstraction extends Abstraction /典型的扩充抽象类代码public void operation()/代码impl.operationImpl();/代码 实例一:模拟毛笔现
20、需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类。而如果使用毛笔的话,只需要3种型号的毛笔,外加5个颜料盒,用3+5=8个类就可以实现15支蜡笔的功能。本实例使用桥接模式来模拟毛笔的使用过程。8. 外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。外观模式包含如下角色:Facade: 外观角色SubSystem:子系
21、统角色public class Facade /典型的外观角色代码 private SubSystemA obj1 = new SubSystemA(); private SubSystemB obj2 = new SubSystemB(); private SubSystemC obj3 = new SubSystemC(); public void method() obj1.method(); obj2.method(); obj3.method(); 实例一:文件加密某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件、加密、保存加密之后的文件。读取文件和保存文件使用
22、流来实现,这三个操作相对独立,其业务代码封装在三个不同的类中。现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观类完成文件的读取、加密和保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块。抽象外观类:9. 代理模式(Proxy Pattern) :给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英文叫做Proxy或Surrogate,它是一种对象结构型模式。代理模式包含如下角色:Subject: 抽象主题角色Proxy: 代理主题角色RealSubject: 真实主题角色public class Proxy implements Subject
23、/典型的代理类实现代码 private RealSubject realSubject = new RealSubject(); public void preRequest() . public void request() preRequest(); realSubject.request(); postRequest(); public void postRequest() 实例一:论坛权限控制代理 在一个论坛中已注册用户和游客的权限不同,已注册的用户拥有发帖、修改自己的注册信息、修改自己的帖子等功能;而游客只能看到别人发的帖子,没有其他权限。使用代理模式来设计该权限管理模块。在本实例中
24、我们使用代理模式中的保护代理,该代理用于控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。10. 命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。命令模式包含如下角色:Command: 抽象命令类ConcreteCommand: 具体命令类Invoker: 调用者Receiver: 接收者Client:客户类public abstract class Command /典
25、型的抽象命令类代码public abstract void execute(); public class Invoker /典型的调用者代码private Command command;public Invoker(Command command)mand=command;public void setCommand(Command command)mand=command;/业务方法,用于调用命令类的方法public void call()command.execute(); public class ConcreteCommand extends Com
26、mand /典型的具体命令类代码private Receiver receiver;public void execute()receiver.action(); public class Receiver /典型的请求接收者代码public void action()/具体操作 命令模式顺序图:实例一:电视机遥控器 电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应电视机的不同操作。抽象命令角色由一个命令接口来扮演,有三个具体的命令类实现了抽象命令接口,这三个具体命令类分别代表三种操作:打开电视机、关闭电视机和切换频道。显然,电视机遥控器就是一个典型的命令模式应用
27、实例。11. 迭代器模式(Iterator Pattern) :提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。迭代器模式包含如下角色:Iterator: 抽象迭代器ConcreteIterator: 具体迭代器Aggregate: 抽象聚合类ConcreteAggregate: 具体聚合类实例:电视机遥控器 电视机遥控器就是一个迭代器的实例,通过它可以实现对电视机频道集合的遍历操作,本实例我们将模拟电视机遥控器的实现。12. 观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象
28、状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式是一种对象行为型模式。观察者模式包含如下角色:Subject: 目标(被观察者)ConcreteSubject: 具体目标Observer: 观察者ConcreteObserver: 具体观察者import java.util.*;public abstract class Subject /典型的抽象目标类代码 protected Ar
29、rayList observers = new ArrayList();public abstract void attach(Observer observer);public abstract void detach(Observer observer);public abstract void notify(); public class ConcreteSubject extends Subject /典型的具体目标类代码public void attach(Observer observer)observers.add(observer);public void detach(Obs
30、erver observer)observers.remove(observer);public void notify()for(Object obs:observers)(Observer)obs).update();public interface Observer /典型的抽象观察者代码public void update(); public class ConcreteObserver implements Observer /典型的具体观察者代码public void update()/具体更新代码 Subject subject = new ConcreteSubject();
31、/客户端代码片段Observer observer = new ConcreteObserver();subject.attach(observer);subject.notify();观察者模式顺序图:实例一:猫、狗与老鼠 假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老鼠跑,狗也跟着叫,使用观察者模式描述该过程。MVC模式是一种架构模式,它包含三个角色:模型(Model),视图(View)和控制器(Controller)。观察者模式可以用来实现MVC模式,观察者模式中的观察目标就是MVC模式中的模型(Model),而观察者就是MVC中的视图(View),控制器(Controller)充
32、当两者之间的中介者(Mediator)。当模型层的数据发生改变时,视图层将自动改变其显示内容。13. 策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。策略模式是一种对象行为型模式。策略模式包含如下角色:Context: 环境类Strategy: 抽象策略类ConcreteStrategy: 具体策略类public abstract class AbstractStrategy /重构之后的抽象策略类 public abstract void algorithm();
33、 public class ConcreteStrategyA extends AbstractStrategy /重构之后的具体策略类 public void algorithm() /算法A public class Context /重构之后的环境类 private AbstractStrategy strategy; public void setStrategy(AbstractStrategy strategy) this.strategy= strategy; public void algorithm() strategy.algorithm(); Context context = new Cont
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年山西老区职业技术学院单招职业适应性测试题库带答案详解(巩固)
- 2026年山西铁道职业技术学院单招职业倾向性测试题库含答案详解(培优)
- 2026年广州工程技术职业学院单招综合素质考试题库附参考答案详解(满分必刷)
- 2026年广西安全工程职业技术学院单招职业倾向性测试题库及1套参考答案详解
- 2026年广东农工商职业技术学院单招职业技能测试题库带答案详解(轻巧夺冠)
- 2026年崇左幼儿师范高等专科学校单招职业倾向性测试题库附参考答案详解(模拟题)
- 2026年广东茂名农林科技职业学院单招综合素质考试题库附参考答案详解ab卷
- 2026年山西金融职业学院单招职业倾向性测试题库带答案详解(b卷)
- 2026年平凉职业技术学院单招职业倾向性测试题库及答案详解一套
- 2026年平顶山文化艺术职业学院单招综合素质考试题库附参考答案详解(满分必刷)
- 2026年常州工业职业技术学院单招职业适应性测试题库及答案详解(历年真题)
- 2026四川成都市金牛国投人力资源服务有限公司招聘金牛区街区规划师8人考试参考试题及答案解析
- CMA质量手册(2025版)-符合27025、评审准则
- 洁净车间安全施工方案
- 《中租联工程机械操作标准-旋挖钻机司机》征求意见稿
- 2023年考研考博-考博英语-煤炭科学研究总院考试历年高频考点真题荟萃带答案
- Peppa-Pig第1-38集英文字幕整理
- 统计用产品分类目录
- 雅培Perclose血管缝合器使用过程中常见问题及解决方法
- 中小学生课外读物负面清单自查表
- YS/T 73-2011副产品氧化锌
评论
0/150
提交评论