软件设计模式
PoemK
这个作者很懒,什么都没留下…
展开
-
原型模式
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Prototype原型模式{ abstract class Prototype { private string原创 2017-05-28 15:20:46 · 313 阅读 · 0 评论 -
桥接模式的应用
桥接模式的应用一个咖啡店可以提供大杯(JorumCoffee)、中杯(MediumCoffee)、小杯(SmallCoffee)的咖啡(Coffee),为了满足不同用户的口味,在咖啡中可以添加牛奶(Milk),或者糖(Sugar),或者柠檬(Lemon),提供给用户不同口味的组合,如大杯咖啡加牛奶,中杯咖啡加糖,小杯咖啡加柠檬,小杯咖啡加糖等。应用桥接模式,用C#控制台应用程序实现该设计。原创 2017-05-19 00:30:44 · 2164 阅读 · 0 评论 -
装饰模式的应用
装饰模式的应用“喜羊羊逃命”游戏:喜羊羊被灰太狼追,喜羊羊最多5条命,灰太狼每咬到喜羊羊一次,喜羊羊就要少一条命。在逃的过程中喜羊羊可以吃到三种苹果,吃“红苹果”可以给喜羊羊加上保护罩,吃“绿苹果”可以加快喜羊羊奔跑速度,吃“黄苹果”可以使喜羊羊趟着水跑。应用装饰模式,用C#控制台应用程序实现该设计。绘制该模式的UML图。提示:这个例子如果用类的继承来实现的话那可就麻烦了,你需要为喜羊原创 2017-05-19 10:46:32 · 1275 阅读 · 0 评论 -
外观模式的应用
外观模式的应用一个保安系统的,由录像机、电灯、红外线监控和警报器组成。保安系统的操作人员需要经常将这些仪器启动和关闭。保安类需要用到所有的录像机(Camera)、电灯(Light)、感应器(Sensor)和警报器(Alarm)对象,保安觉得使用不方便。应用外观模式,用C#控制台应用程序改进该设计。绘制该模式的UML图。using System;using System.C原创 2017-05-19 11:17:43 · 1322 阅读 · 0 评论 -
观察者模式
观察者模式的应用网上商店中如果商品(product)在名称(name)、价格(price)等方面有变化,系统能自动通知会员,将是网上商店区别传统商店的一大特色。如何设计实现? 说明你所选择的设计模式,画出类关系图并指明各个类的角色。应用外观模式,用C#控制台应用程序改进该设计。绘制该模式的UML图。using System;using System.Collections.G原创 2017-05-19 12:06:03 · 1345 阅读 · 0 评论 -
策略模式的应用
策略模式的应用在图书销售时,根据不同类型的图书有不同的折扣,计算金额时必须区别对待,例如计算机类图书7折,英语类图书6折。应用策略模式,用C#控制台应用程序实现该设计。绘制该模式的UML图。using System;using System.Collections.Generic;using System.Linq;using System.Text;usi原创 2017-05-19 12:31:56 · 1027 阅读 · 0 评论 -
单例模式
很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。 通常客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置文件内容的对象。如果在系统运行中,有很多地方都需要使用配置文件的内容,系统中会同时存在多份配置文件的内容,这会严重浪费内存资源。事实上,对于AppConfig类,在运行期间,只需要一个对象实例就够了。那么应原创 2017-05-31 19:27:55 · 617 阅读 · 0 评论 -
工厂方法模式
有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。利用工厂模式改善设计,用C#控制台应用程序实现该OEM制造商的工厂模式。绘制该模式的UML图。public abstract class Laptop {原创 2017-05-31 19:34:13 · 2467 阅读 · 0 评论 -
抽象工厂模式
麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cola),用C#控制台应用程序实现这两个快餐店经营产品的抽象工厂模式。绘制该模式的UML图。namespace shiyan3chouxianggongchang{ interface IHamburg { void product();原创 2017-05-31 19:40:21 · 1657 阅读 · 0 评论 -
建造者模式
建造者模式是一种创建型模式,它主要是应对项目中一些复杂对象的创建工作。所谓“复杂对象”,是指此对象中还含有其它的子对象。我们现在定义一个场景:汽车生产必须包含车轮(Wheel)、油箱(OilBox)和车身(Body),应用建造者模式,用C#控制台应用程序实现该设计,构建BMW品牌和BenZ品牌汽车生产。绘制该模式的UML图。namespace shiya原创 2017-05-31 19:49:31 · 811 阅读 · 0 评论 -
适配器模式的应用
适配器模式的应用一个软件团队开发绘图系统,设计了圆对象(Circle)、矩形对象(Rectangle),线对象(Line)都支持Draw()函数,即可以通过Draw()函数绘制图形。为了加快项目进度,将角度对象(Angle)绘制功能交给了合作团队实现。但合作团队将角度对象绘制函数定为了DrawAngle()。绘图系统提供给用户后,用户不满意,希望能统一的调用,不用记太多命令原创 2017-05-18 23:34:18 · 792 阅读 · 0 评论 -
命令模式
烧烤店老板Barbecuer类,这个类可以烤各种食物。还定义一个抽象类命令类--Command(图中是订单类),子类是各种具体命令。由于订单类中的订单必须执行,所以订单类中要有一个Barbecuer对象(关联关系)。有一个服务员类,整理顾客命令,该类中有一个list放置Command,故与Command类至少为关联关系。Command类中要有一个excute()函数,用于命令执行原创 2017-05-29 23:01:38 · 263 阅读 · 0 评论 -
组合模式
某个子类型拥有list,遍历信息时,直接调用父类型的抽象函数即可using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 组合模式{原创 2017-05-28 16:00:47 · 207 阅读 · 0 评论 -
享元模式(Flyweight)
感觉就像是在运用c++中的STL容易map:using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 享元模式{ abstract原创 2017-05-28 18:21:41 · 196 阅读 · 0 评论 -
代理模式
如果说这个计算程序部署在我们本地计算机上,使用就非常之简单了,我们也就不用去考虑Proxy模式了。但现在问题是这个Math类并没有部署在我们本地,而是部署在一台服务器上,也就是说Math类根本和我们的客户程序不在同一个地址空间之内,我们现在要面对的是跨越Internet这样一个网络障碍:代理模式:代理类和被代理的类实现一个接口,代理类中定义一个被代理类的对象(个人描述,可能不准原创 2017-05-28 18:43:15 · 218 阅读 · 0 评论 -
状态模式
状态模式:状态之间的切换,设计多个具体状态类S'继承一个抽象状态类S。另外定义一个类A,A中定义对象s,A中的某个方法将a对象自身传到s的方法中去,通过状态类/子类来改变对象a的状态(s的值)using System;using System.Collections.Generic;using System.Linq;using System.Text;using System原创 2017-05-28 23:27:34 · 195 阅读 · 0 评论 -
中介模式
这个例子讲的是同事之间通过一个中介来收发消息,有一个具体中介类继承抽象中介类,两个具体同事类继承抽象同事类,同事类里面需要有一个中介对象,同时这个中介对象里面需要两种具体同事类(否则不能直接调用子类特有的功能)的对象,每个具体同事对象发送消息时通过中介对象传送到另一个同事对象那去。using System;using System.Collections.Generi原创 2017-05-29 09:15:01 · 276 阅读 · 0 评论 -
职责链模式
很简单,类图如图所示,管理者抽象类有很多子类,是具体的管理者类,这些管理者类有级别的高低关系。管理者是用来处理申请的,有一个申请类,因为申请对象作为管理者类工作函数的形参,所以具体管理者类和申请类属于依赖关系,具体管理者类依赖于申请类。每一个管理者如果不能处理当前申请,则交由上级管理者处理,故每一个管理者类都需要定义一个上级管理者对象,所以应该在抽象管理者类上画上自关联(图中画的是聚合关系,差不多原创 2017-05-29 10:42:00 · 264 阅读 · 0 评论 -
迭代器模式
大概可以理解为,左边是存储好的元素,右边是迭代器,用于访问这些元素。左边的类需要右边的构造函数来生成右边的具体迭代器对象,所以具体Aggregate类依赖于具体迭代器类。同时具体迭代器类访问元素需要在类里面定义一个具体Aggregate对象,所以他们之间有关联关系,且箭头指向具体Aggregate类。using System;using System.Collection原创 2017-05-29 14:04:17 · 180 阅读 · 0 评论 -
模板方法模式
模板方法模式:我的理解是:重载虚函数using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 模板方法{ class TestPaper { pu原创 2017-05-29 15:57:52 · 754 阅读 · 0 评论 -
访问者模式
我觉得Employee和Visitor还有一个互为依赖的关系。IncomeVisitor用于访问员工的收入,VacationVisitor用于访问假期长度。员工分为老师和工程师。其中Employees类拥有一个员工列表,可以增删员工,访问列表时,调用列表中员工的Accept()函数,需要传入一个Visitor对象visitor作为参数,该函数的功能原创 2017-05-29 18:52:29 · 230 阅读 · 0 评论 -
备忘录模式
类图都不用画了啊,就一个类。说简单点就是事先把对象备份一份,当对象的值发生变化时,可以直接用备份中的数据赋值回来。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 备忘录模原创 2017-05-29 17:40:46 · 230 阅读 · 0 评论