设计模式
一只拥有神力的兔子
今天也要好好敲代码呦!
展开
-
观察者模式
一、 问题描述 实验课上,老师因故暂时离开,A君与B君要游戏,但怕被抓,就委托门口的Spy同学盯梢。老师回来了,Spy分别通知A君和B君,关闭游戏,赶紧编程。 二、 完成如下题目要求 画出静态图 写出采用该设计模式的好处 观察者模式设计后,会以集合的方式来管理用户(Observer),包括注册,移除和通知。 这样,我们增加观察者(这里可以理解成一个新的公告板),就不需要去修改核心类WeatherData不会修改代码,遵守开放封闭原则。 编写代码 package observer;原创 2021-04-22 00:07:06 · 122 阅读 · 0 评论 -
建造者模式
一、 问题描述 画出两个小人:一个瘦人、一个胖人。小人要画头、身体、双手、双腿。 二、 完成如下题目要求 画出静态图 写出采用该设计模式的好处 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得创建的过程可以创建不同的产品对象。 每个具体的建造者都相对独立而与其他的具体建造者无关。 将复杂的产品的创建步骤分解在不同的方法中,使得创建过程更加清晰 符合开闭原则 编写代码 package builder; public class Client { pub原创 2021-04-22 00:04:21 · 83 阅读 · 0 评论 -
外观模式
一、 问题描述 客户购买和赎回基金,基金再购买和卖出多种股票或债券。过程相当于客户购买和赎回多种股票和债券,但客户并没有直接接触股票或债券。使用外观模式编写程序实现上述内容。 二、 完成如下题目要求 画出静态图 写出采用该设计模式的好处 客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟外观交互就可以。 通过合理使用Facade,可以帮助我们更好的划分访问的层次 外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。 编写代码原创 2021-04-22 00:00:15 · 92 阅读 · 0 评论 -
模板方法模式
一、 问题描述 设某考试试卷题目如下 在C#中,下列( )是正确的变量名称。 A. public B. _123 C. 9int D. ~bool 类中某属性仅有get访问器,则该属性为()。 A. 只读属性 B. 只写属性 C. 读写属性 D. 不可读不可写的属性 下列选项中,()是引用类型。 A.enum类型 B. struct类型 C. string类型 D. int类型 要求:有甲乙两人抄了上题,并分别写出了答案。请模拟上述过程,使用模板方法模原创 2021-04-21 23:42:12 · 90 阅读 · 0 评论 -
适配器模式
一、 问题描述 球场上有前锋、中锋、后卫,其中某队员是外籍球员,他不能听懂进攻(attack)或防御(defend)指示(外籍球员的进攻和防御与其他队员接口不同),需要有一个翻译从旁指挥(翻译充当适配器)。 二、 完成如下题目要求 画出静态图 写出采用该设计模式的好处 将一个类的接口转换成另一个接口,让原本不可以兼容的类可以兼容 编写代码 package BasketBallPlayer2; /** * 主方法 * @author Administrator * */ pu原创 2021-04-21 23:28:48 · 157 阅读 · 0 评论 -
状态模式
一、 问题描述 请对程序员一天的工作状态进行模拟: 12点前:上午工作,精神百倍 13点前:饿了午饭,犯困午休 17点前:状态不错,努力工作 17点以后:工作是否完成? 完成:下班回家 没有: 21点前:加班工作,疲累之极 21点后:扛不住了,倒下睡觉 二、 完成如下题目要求 画出静态图 写出采用该设计模式的好处 状态模式每个状态的行为封装到对应的类中方便维护 符合开闭原则 编写代码 package statePattern; /** * 主方法 * @author Sakur原创 2021-04-21 23:23:19 · 101 阅读 · 0 评论 -
原型模式
一、 问题描述 要求设计一个简历类,必须有姓名,可以设置性别和年龄,及工作经历。需要三份简历,简历的部分内容是相同的。考虑如何实现,使得程序效率更高。 二、 完成如下题目要求 画出静态图 写出采用该设计模式的好处 在初始化信息不发生变化的情况下,克隆可以隐藏对象的创建细节,大大的提高性能 不用重复初始化对象,而是动态地获取对象运行时的状态 编写代码 /** * 主方法深拷贝 * @author Sakura * */ class Main { public static原创 2021-04-21 23:15:00 · 131 阅读 · 0 评论 -
工厂方法模式
一、 问题描述 改进简单工厂模式,实现四则运算(加减乘除),采用工厂方法思想将需要创建的对象延迟到子类。 二、 完成如下题目要求 画出静态图 写出采用该设计模式的好处 由多个工厂类实现工厂接口,利用多态来创建不同的产品对象,避免了if-else判断 添加新的功能时,只需要添加相应的工厂,和实现类,符合开放封闭原则 编写代码 import java.util.Scanner; /** * 计算器 * @author Sakura * */ public class Ca原创 2021-04-21 23:10:41 · 66 阅读 · 0 评论 -
代理模式
一、 问题描述 校园中有个男孩(Pursuit)爱慕一个女孩(SchoolGirl),但是非常腼腆,无法直接送出礼物(洋娃娃、鲜花、巧克力)表明心意。恰巧这个男孩有个不错的兄弟(Proxy)乐意代男孩将礼物送给女孩。请写出一个程序描述这个的情景,将男孩的礼物通过他的兄弟送给女孩。 二、 完成如下题目要求 画出静态图 写出采用该设计模式的好处 一、远程代理,也就是一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。 二、虚拟代理,是根据需要创建开销很大的对象。通过它来原创 2021-04-21 23:04:06 · 100 阅读 · 0 评论 -
装饰模式
一、 问题描述 QQ秀有给模型小人,穿戴衣服的功能,就像人类穿衣一样。假设衣服的种类有西装、大T恤、垮裤、破球鞋、领带、皮鞋等,你如何给小人着装?顺序如何?请设计并实现一个着装程序。 二、 完成如下题目要求 画出静态图 写出采用该设计模式的好处 1. 把类中的装饰功能从类中搬移去除,这样可以简化原有的类; 2. 可以有效地把类的核心职责和装饰功能区分开 3. 去除相关类中重复的装饰逻辑 编写代码 //主方法 public class Main { public static原创 2021-04-21 22:55:28 · 91 阅读 · 0 评论 -
策略模式
一、 问题描述 请设计并实现一个收银软件,模拟超市中客户付费金额的计算过程。主要实现三种收费策略: (1)原价付费;(2)满X返Y,如满300返100;(3)打折,如打8折。 二、 完成如下题目要求 画出静态图 写出采用该设计模式的好处 上下文(Context)和具体策略(ConcreteStrategy)是松耦合关系。 因此上下文只知道它要使用某一个实现Strategy接口类的实例,但不需要知道具体是哪一个类。 策略模式满足“开-闭原则”。当增加新的具体策略时,不需要修改上下文类的原创 2021-04-21 10:28:46 · 99 阅读 · 0 评论 -
简单工厂模式
一、 问题描述 请设计并实现一个简单的四则运算器。主要实现整形(或者双精度)加减乘除的运算。 二、 完成如下题目要求 画出静态图 写出采用该设计模式的好处 1、工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品; 2、简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。 3、客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂原创 2021-04-21 10:18:33 · 90 阅读 · 0 评论 -
UML类图
类图 UML类图常用构件 类 第一层显示类的名称。抽象类,用斜体表示。 第二层表示类的特性,通常是字段和属性。 第三层是类的操作,通常是方法或行为。 “+”表示public;“-”表示private;“#”表示protected。 接口 顶端有《接口》字样或《interface》 第一行:接口的名称。 第二行:接口的方法。 接口的棒棒糖表示方法。 圆圈旁为接口的名称。 接口方法在实现类中出现。 继承 继承使用空心三角和实线来描述。 继承是指在一个类基础上定义一个新类,原有的类叫原创 2021-04-21 09:45:57 · 379 阅读 · 0 评论