设计模式——外观模式
外观设计模式1、影院管理需求【1】需求组件一个家庭影院:
DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为:
直接用遥控器,统筹各设备开关
开爆米花机
放下屏幕
开投影仪
开音响
开DVD,选DVD
去拿爆米花
调暗灯光
播放
观影结束后,关闭各种设备
【2】传统方式解决影院管理需求存在的问题分析1)在ClientTest的main方法中,创建各个子系统的对象,并直接去调用子系统(对象)相关方法,会造成调用过程混乱,没有清晰的过程。
2)不利于在ClientTest中去维护对子系统的操作。
3)解决思路:定义一个高层接口,给子系统中的一组接口提供一个一致的界面(比如在高层接口提供四个方法ready、play、pause、end),用来访问子系统中的一群接口。
4)也就是说就是通过定义一个一致的接口(界面类),用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节=>外观模式
2、外观模式基本介绍1)外观模式(Facade),也叫“过程模式”:外观模式为子系统中的一组接口提供一个一致的 ...
设计模式——组合模式
组合设计模式1、学校院系展示需求【1】需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。
【2】方案1-传统方式解决学校院系展示存在的问题分析1)将学院看作是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的
2)实际上我们的要求是:在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,因此这种方案,不能很好的实现管理操作,比如对学院、系的添加,删除、遍历等
3)解决方案:把学校、院、系都看作是组织结构,它们之间没有继承关系,而是一个树形结构,可以更好的实现管理操作。=》组合模式
2、组合模式基本介绍1)组合模式(Composite Pattern),又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示”整体-部分”的层次关系。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
2)组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
3)这种类型的设计模式属于结构型模式。
4)组合模式使得用户对单个对象和组合对象的访问具有一致性,即 ...
设计模式——装饰者模式
装饰者设计模式1、星巴克咖啡订单项目(咖啡馆)【1】需求1)咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)
2)调料:Milk、Soy(豆浆)、Chocolate
3)要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便
4)使用OO的来计算不同种类咖啡的费用:客户可以点单品咖啡,也可以单品咖啡+调料组合。
【2】方案1-传统方式解决订单问题分析1)Drink是一个抽象类,表示饮料
2)des是对咖啡的描述,比如咖啡的名字
3)cost()方法就是计算费用,Drink类中做成一个抽象方法
4)Decaf就是单品咖啡,继承Drink,并实现cost
5)Espress&&Milk就是单品咖啡+调料,这个组合很多(组合起来就是一种咖啡,会有非常多组合,子类超级多)
6)问题:这样设计,会有很多类,当我们增加一个单品咖啡,或者一个新的调料,类的数量就会倍增,就会出现类爆炸
【3】方案2-解决星巴克咖啡订单(好一些)前面分析的方案1因为咖啡单品+调料组合会造成类的倍增, ...
设计模式——桥接模式
桥接设计模式1、手机操作问题现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等)
【1】以上传统方式的缺点1)扩展性问题(类爆炸),如果我们再增加手机样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要再各个手机样式类下增加。
2)违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本。
3)解决方案-使用桥接模式。
2、桥接模式的结构桥接(Bridge)模式包含了以下主要角色:
抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。
扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。
具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。
3、桥接模式——基本介绍1)桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层 ...
设计模式——适配器模式
0、结构型模式结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者采用组合或聚合来组合对象。
由于组合关系或聚合关系比继承关系耦合度低,满足”合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。
结构型模式分为以下7种:
代理模式
适配器模式
装饰者模式
桥接模式
外观模式
组合模式
享元模式
适配器设计模式1、旅游使用插座问题不同国家所使用的插座国标是不同的,所以去国外旅游可以买个多功能转换插头(适配器),这样就可以使用了。
2、适配器模式——基本介绍1)适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主要目的是为了保证兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。
2)适配器模式属于结构型模式。
3)主要分为三类:类适配器模式、对象适配器模式、接口适配器模式。类适配器模式比对象适配器模式的耦合度高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。
3、适配器 ...
设计模式——建造者设计模式
建造者设计模式1、盖房子项目需求1)需要建房子:这一过程为打桩、砌墙、封顶。
2)房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的。
3)编写程序,完成需求。
12345678910111213141516171819202122232425262728293031323334// 传统解决方式public abstract class AbstractHouse { // 打地基 public abstract void buildBasic(); // 砌墙 public abstract void buildWalls(); // 封顶 public abstract void roofed(); public void build() { buildBasic(); buildWalls(); roofed(); }}public class HighBuilding extends Abs ...
设计模式——原型设计模式
原型设计模式1、克隆羊问题现在有一只羊,姓名为:tom,年龄为:1,颜色为:白色,请编写程序创建和tom杨属性完全相同的10只羊。
12345678910111213141516171819202122232425262728293031// 传统解决方式public class Sheep { private String name; private Integer age; private String color; public Sheep() {} public Sheep(String name, Integer age, String color) { this.name = name; this.age = age; this.color = color; } getter()... setter()...}public class Test { public static void main ...
设计模式——工厂设计模式
工厂设计模式1、一个具体需求一个披萨的项目:要便于披萨种类的扩展,要便于维护。
1)披萨的种类很多(比如GreekPizz、CheesePizz等)
2)披萨的制作有prepare,bake,cut,box
3)完成披萨店订购功能。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980// 将Pizza类做成抽象类public abstract class Pizza { protected String name; // 准备原材料,不同pizza是不一样的 public abstract void prepare(); public void bake() { System.out.println(name + "baking;"); } ...
设计模式——UML类图
UML类图1、UML基本介绍【1】UML——Unified modeling language(统一建模语言),是一种用于软件系统分析和设计的语言工具,它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息,它用于帮助软件开发人员进行思考和记录思路的结果。【2】UML从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等9种图。【3】UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等。【4】使用UML来建模,常用的工具有Rational Rose,也可以使用一些插件来建模。
2、类图的概述类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。
在软件工程中,类图是一种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,可以简化了人们对系统的理解。
类图是系统分析和设计阶段的重要产物,是系统编码 ...
设计模式——单例设计模式
单例设计模式1、设计模式概述和分类(三种类型共23种)设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案,设计模式代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的一段时间的实验和错误总结出来的。设计模式的本质是提高软件的维护性,通用性和扩展性,并降低软件的复杂度。
【1】创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。创建型模式主要关注点是”怎样创建对象?”,它的主要特点是”将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。
【2】结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。【3】行为型模式:模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)。
2、单例模式所谓类的单例设计模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。单例模式有 ...