三教学方法与手段(25) 3-1教学模式设计与创新(8),1院校合作,重视学生在校学习与实际工作的一致性 以学生毕业后临床实际工作任务为依据,院、校、企共同参与教学设计,共建实训室。在校内模拟医院环境下和在医院真实环境下进行讲解、演示和训练,使学生在校学习与临床实际工作相一致,尤其实践教学项目的选择
14 设计模式教学课件Tag内容描述:
1、三教学方法与手段(25) 3-1教学模式设计与创新(8),1院校合作,重视学生在校学习与实际工作的一致性 以学生毕业后临床实际工作任务为依据,院、校、企共同参与教学设计,共建实训室。在校内模拟医院环境下和在医院真实环境下进行讲解、演示和训练,使学生在校学习与临床实际工作相一致,尤其实践教学项目的选择是病理检查技术工作中应用最广泛的具体项目,均与临床实际工作相一致,使学生在校学习与实际工作接轨。,2工学交替、任务驱动、项目导向、课堂与实习一体化,对本课程每一教学模块,按临床实际工作任务流程设计,将相关知识点穿。
2、实验问题,课时:18学时 任务:将23种模式进行集成(相当于一次课程设计),上课补充的例题必须作为模式的范例写上 提交:集成软件;设计报告书,策略模式,工资支付的例子 很多企业的工资支付方式是很灵活的,可支付方式是比较多的,比如:人民币现金支付、美元现金支付、银行转账到工资帐户、银行转账到工资卡;一些创业型的企业为了留住骨干员工,还可能有:工资转股权等等方式 随着公司的发展,会不断有新的工资支付方式出现,这就要求能方便的扩展;另外工资支付方式不是固定的,是由公司和员工协商确定的,也就是说可能不同的员工采用。
3、外观(门面)模式,Facade Pattern,外观(Facade)模式,外部与一个子系统的通信必须通过一个统一的外观(Facade)对象进行,这就是外观模式。 基金股票 医院的例子 家庭影院 其他,如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。 可以设置一个接待员的位置,由接待员负责代为挂号、划价、缴费、取药等。这个接待员就是门面模式的体现,家庭影院:看DVD,打开爆米花机 将灯光。
4、状态(State)模式,状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的逻辑简化。,工作状态,public class Work/钟点private int hour;public int Hourget return hour; set hour = value; /任务完成private bool finish = false;public bool TaskFinishedget return finish; set finish = value; ,public void WriteProgram()if (hour 12)Console.WriteLine(“当前时间:0点 上午工作,精神百倍“, hour);else if (hour 13)Console.WriteLine(“。
5、1,桥接(Bridge)模式,2,场景描述,考虑这样一个实际的业务功能:发送提示消息。基本上所有带业务流程处理的系统都会有这样的功能,比如某人有新的工作了,需要发送一条消息提示他。 从业务上看,消息又分成普通消息、加急消息和特急消息多种,不同的消息类型,业务功能处理是不一样的,比如加急消息是在消息上添加加急,而特急消息除了添加特急外,还会做一条催促的记录,多久不完成会继续催促。从发送消息的手段上看,又有系统内短消息、手机短消息、邮件等等。 现在要实现这样的发送提示消息的功能,该如何实现呢?,3,不用模式的解决方。
6、建造者(生成器Builder)模式,仔细阅读体会“建造小人”例子 建造“小人”的过程是稳定的,都需要头身手脚。具体建造的细节不同,有胖瘦高矮等区别。,抽象的建造人的类,abstract class PersonBuilderprotected Graphics g;protected Pen p;public PersonBuilder(Graphics g, Pen p)this.g = g;this.p = p;public abstract void BuildHead();public abstract void BuildBody();public abstract void BuildArmLeft();public abstract void BuildArmRight();public abstract void BuildLegLeft();public abstract void BuildLegRight();,clas。
7、抽象工厂(Abstract Factory)模式,换DB的例子,从使用Acess换为使用SqlServer 从SqlServer换为Oracle由于数据库使用的命名空间不同,用到的方法不同,所以很难直接替换,往往要用时间摆平。,模拟数据库访问例子:,class Userprivate int _id;public int IDget return _id; set _id = value; private string _name;public string Nameget return _name; set _name = value; ,User表,操作User表,class SqlserverUserpublic void Insert(User user)Console.WriteLine(“在Sqlserver中给User表增加一条记录“);public User GetUser(int id)Con。
8、第2章 策略模式 (Strategy Pattern ),1. 商场收银软件,做一个商场收银软件,营业员根据客户购买商品单价和数量,向客户收费。,关键代码,double total = 0.0d; private void btnOk_Click(object sender, EventArgs e) double totalPrices=Convert.ToDouble(txtPrice.Text) * Convert.ToDouble(txtNum.Text); total = total + totalPrices; lbxList.Items.Add(“单价:”+txtPrice.Text+“ 数量:”+txtNum.Text+“ 合计:”+totalPrices.ToString(); lblResult.Text = total.ToString(); ,无法满足打折,满300送300等促销措施!,报价管理。
9、常见面向对象设计原则,引言,设计原则是思想上的指导 设计模式是实现上的手段 设计模式是设计原则的具体体现 在实际开发中,很少做到完全遵守,总是在有意无意的违反一些或者部分原则 设计是一种危险的平衡艺术,单一职责原则(SRP) Single Responsibility Principle,拍摄UFO,单一职责原则,就一个类而言,应该仅有一个引起它变化的原因(职责)。 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏 难。
10、模板方法模式,Template Method,由考试的例子想到的。 准备一个抽象类,将部分逻辑以具体方法以及具体子类的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模版方法模式的用意。,考试例子,class TestPaperpublic void TestQuestion1()Console.WriteLine(“ 杨过得到,后来给了郭靖,炼成倚天剑、屠龙刀的玄铁可能是 a.球磨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维 “);Console.WriteLine(“答案:“ + Answer1();public void TestQuestion2()。
11、命令(Command)模式,烤羊肉串引来的思考,紧耦合松耦合,另一场景,电脑装配好了,如何开机 ? 首先加载电源,然后是设备检查,再然后是装载系统,最后电脑就正常启动了。可是谁来完成这些过程?如何完成? 真正完成这些工作的是主板,那么客户和主板如何发生联系呢?现实中,是用连接线把按钮连接到主板上的,这样当客户按下按钮的时候,就相当于发命令给主板,让主板去完成后续的工作。 从客户的角度来看,开机就是按下按钮,不管什么样的主板都是一样的,也就是说,客户只管发出命令,谁接收命令,谁实现命令,如何实现,客户是不关心的。
12、原型(Prototype)模式,原型(Prototype)模式,原型模式的用意是:通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类型对象。,Java对原型模式的支持,Java语言中已经提供了clone方法,定义在Object类中,需要实现克隆功能的类,只需要实现java.lang.Cloneable接口即可,C#对原型模式的支持,在C#里面,我们可以很容易的通过Clone()方法实现原型模式。任何类,只要想支持克隆,必须实现C#中的ICloneable接口。ICloneable接口中有一Clone方法,可以在类中复写,实现自定义的克隆方法。 克隆的实现方。
13、组合(Composite)模式,场景问题,商品类别树+服装+男装-衬衣-夹克+女装-裙子-套装,特点 有一个根节点 树枝节点 叶子节点,现在需要管理商品类别树,假设要求能实现输出如上商品类别树的结构功能,应该如何实现?,分析,商品类别树的节点被分成两种,一种是容器节点,另一种是叶子节点。 容器节点可以包含其他容器节点或者叶子节点,不带模式的解决方案,叶子对象: public class Leafprivate String name=“;public Leaf(String name)this.name=name;public void printStruct(String preStr)System.out.println(preStr+“-“+name); ,组合对象。
14、1,单例(Singleton)模式,2,场景问题,考虑一个应用,读取配置文件的内容 很多项目中,都有与应用相关的配置文件,一般是自定义的,在里面定义一些应用需要的参数数据。 多采用xml格式。也有采用properties格式的。 要读取配置文件的内容,如何实现?,3,AppConfig.properties,paramA=a paramB=b,4,public class AppConfig private String parameterA;private String parameterB;public String getParameterA()return parameterA;public String getParameterB()return parameterB;public AppConfig()readConfig();,5,private void readConfi。
15、职责链(Chain of Responsibility)模式,从击鼓传花谈起,击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正。开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒。 击鼓传花便是职责链模式的应用。职责链可能是一条直线、一个环链或者一个树结构的一部分。,实例,公司申请聚餐费用 公司申请差旅费用,问题,聚餐费用申请的处理流程是可能会变动的各个处理环节的业务处理也是会变动的,问题抽象,客户端发出一个请求,会有很多对象都可以来。
16、装饰(Decorator)模式,循序渐进,从穿衣谈起:写一个可以给人搭配不同服饰的程序,循序渐进,class Personprivate string name;public Person(string name)this.name = name;public void WearTShirts()Console.Write(“大T恤 “);,public void WearBigTrouser()Console.Write(“垮裤 “);public void WearSneakers()Console.Write(“破球鞋 “);,public void WearSuit()Console.Write(“西装 “);public void WearTie()Console.Write(“领带 “);,public void WearLeatherShoes()Console.Write(“皮鞋 “);public void Show()Console.WriteL。
17、适配器模式(Adapter),适配器(Adapter)模式,这很像变压器(Adapter),变压器把一种电压变换成另一种电压。美国的生活用电电压是110V,而中国的电压是220V。如果要在中国使用美国电器,就必须有一个能把220V电压转换成110V电压的变压器。这个变压器就是一个Adapter。 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。,软件系统设计和开发中的问题,在软件系统设计和开发中,这种问题也会经常遇到: 有时为了完成某项工作购买了一个第三方的库来加快开发。这就带。
18、备忘录模式(Memento),Memento模式,没有人想犯错误,但是没有人能够不犯错误。犯了错误一般只能改过,却很难改正(恢复)。 世界上没有后悔药,但是我们在进行软件系统的设计时候是要给用户后悔的权利(实际上可能也是用户要求的权利),我们对一些关键性的操作肯定需要提供诸如撤销(Undo)的操作。那这个后悔药就是Memento模式提供的。,Memento模式的关键就是要在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以利用该保存的状态实施恢复操作。 Memento模式的典型结构图为:,Memento模式基。
19、观察者(Observer)模式,课本例子,办公时间做与工作无关的事情 在老板到来时,前台负责通知好友进入工作状态 注意开放-封闭原则,依赖倒转原则,降低耦合性。,通知者接口,interface Subjectvoid Attach(Observer observer);void Detach(Observer observer);void Notify();string SubjectStateget;set;,class Secretary : Subject/同事列表private IList observers = new List();private string action;/增加public void Attach(Observer observer)observers.Add(observer);/减少public void Detach(Observer observer)observers.Remove(ob。