设计模式--可复用面向对象软件的基础主讲人:吴刚面向对象编程(OOP:ObjectOrientedProgramming)可扩展可维护封装重用抽象多态继承OOP。。。。。OO编程原则1.开闭原则(Open-ClosedPrinciple)模块在开放性方面应该是开放的(易于扩展),在更改性方面应该是封闭的(易于修改而不需要更改类的源代码)。2.Liskov替换法则(LiskovSubstitutionPrinciple)任何基类可以出现的地方,子类一定可以出现。LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用OO编程原则3.针对接口编程组件之间应该尽可能使用接口进行通讯,具体的业务逻辑由子类去实现不变的接口。4.将可变的部分和不可变的部分分离任何时候都将不变的接口与可变的实现分离。如果使用继承的复用技术,我们可以在抽象基类或接口中定义好不可变的部分,而由其子类去具体实现可变的部分。如果使用对象组合,我们可以定义好不可变的部分,而可变的部分可以由不同的组件运行时动态配置。OO编程原则5.优先使用对象组合,而不是类继承优先使用黑箱复用(对象组合)而不是白箱复用(类继承)。利用对象组合我们可以在运行时动态配置组件的功能,并防止类层次规模的爆炸性增长。6.高内聚,低耦合很简单的一句话却是软件设计的精华所在:一个模块包含的功能彼此相关,相互依赖,而与外界很少关联,并且没有承担过多的责任,这样的模块(子系统或者类)称之为高内聚的(HighCohesion)。如果一个模块为实现自身的功能,并不需要了解或者依赖太多外部的知识,则该模块是低耦合的(LowCoupling)。OOP菜鸟成鹰之路前人铺路,后人乘凉。--使用已验证的好设计方案设计模式概述设计模式概述设计模式概述每一个设计模式描述一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次一次地使用该方案而不必做重复劳动。-ChristopherAlexander(克里斯托弗·亚历山大)软件领域的设计模式起源于建筑学。设计模式概述1977年,建筑大师Alexander出版了《APatternLanguage:Towns,Building,Construction》一书。受Alexander著作的影响,KentBeck和WardCunningham在1987年举行的一次面向对象的会议上发表了论文:《在面向对象编程中使用模式》。GOF(“四人帮”)之书目前,被公认在设计模式领域最具影响力的著作是ErichGamma、RichardHelm、RalphJohnson和JohnVlissides在1994年合作出版的著作:《DesignPatterns:ElementsofReusableObject-OrientedSoftware》(中译本《设计模式:可复用的面向对象软件的基本原理》或《设计模式》),该书被广大喜爱者昵称为GOF(GangofFour)之书,被认为是学习设计模式的必读著作,GOF之书已经被公认为是设计模式领域的奠基之作。设计模式概述设计模式在一定的抽象层次上讨论模式,是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述学习设计模式不仅可以使我们使用好这些成功的模式,更重要的是可以使我们更加深刻地理解面向对象的设计思想,非常有利于我们更好地使用面向对象语言解决设计中的问题。设计模式的要素模式名称(patternname)问题(problem)解决方案(solution)效果(consequences)设计模式的要素将以上四个要素细化,通常一个设计模式可以用以下内容进行表述:模式名、意图、别名、动机、适用性、结构、参与者、协作、效果、实现、代码示例、已知应用、相关模式设计模式的三种类型创建型(FactoryMethod)创建型对象模式包括抽象工厂(AbstractFactory)、建造(Builder)、原型(Prototype)、单例(Singleton)四种模式。设计模式的三种类型结构型(Adapter)结构型的对象模式则描述了对象的组装方式,如适配器(Adapter)对象模式、桥接(Bridge)模式、组合(Composite)模式、装饰(Decorator)模式、外观(Facade)模式、享元(Flyweight)模式、代理(Proxy)模式等。设计模式的三种类型行为型(Interpretation,TemplateMethod)行为型的对象模式使用对象复合方法而不是继承,它描述一组对象怎样协作完成单个对象所无法完成的任务,如职责链(ChainofReponsibility)模式、命令(Command)模式、迭代器(Iterator)模式、中介者(Mediator)模式、备忘录(Memento)模式、观察者(Observer)模式、状态(State)模式、策略(Strategy)模式、访问者(Visitor)模式等。设计模式基础--UMLUML类图在UML中,使用一个长方形描述一个类的主要构成,将长方形垂直地分为三层。第1层是名字层,类名字是常规字形,表明该类是具体类,类名字是斜体字形,表明该类是抽象类。第2层是变量层,也称属性层,列出类的成员变量及类型,格式是“变量名字:类型”。第3层是方法层,也称操作层,列出类的方法及返回类型,格式是“方法名字(参数列表):类型”。UML类图—类Student+name:String#age:int-money:double+setName(String):void#printMess():void+getAge():intsetAge(int):void-getMoney();名字层变量层方法层+#-~protected的private的package的public的变量或方法的访问权限是名字前加设计模式基础--UML类图名称缩写形式含义Public+可从所有其他类型访问。Private-只能由此类型的内部定义访问。Package~只能在包含此类型的包以及显式导入此类型的所有包中访问。Protected#只能由此类型以及从其继承的类型访问。设计模式基础--UMLUML类图—接口表示接口的UML图和表示类的UML图类似,使用一个长方形描述一个接口的主要构成,将长方形垂直地分为三层。第1层是名字层,接口的名字必须是斜体字形,而且需要用interface修饰名字,并且该修饰和名字分列在2行。第2层是常量层,列出接口中的常量及类型,格式是“常量名字:类型”。第3层是方法层,也称操作层,列出接口中的方法及返回类型,格式是“方法名字(参数列表):类型”。UML类图—接口interfaceCreator+MAX:int+factoryMethod():Product名字层常量层方法层+public的常量或方法的访问权限是名字前加设计模式的使用1.正确使用2.避免教条3.模式挖掘4.避免乱用5.了解反模式小结面向对象编程的原则设计模式的起源、要素及分类与设计模式相关的UML类图设计模式的意义及使用课后练习(二选一)以下两题任选一,遵循面向对象编程的原则完成(1)设计一个计算器程序,能完成加减乘除四则运算功能(2)设计数字输出程序,要求能根据输入情况,输出100以内偶数、奇数