摘要:
方案一:遍历所有子数组,复杂度o(n^3) public static int Max1() { int[] array = { 1, -2, 3, 10, -4, 7, 2, -5 }; int length = array.Length; int maximum = array[0]; int sum = 0; for (int i = 0; i maximum) maximum = sum; ... 阅读全文
摘要:
命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开,实现二者之间的松耦合。代码1:命令接收者 //烤肉串者 public class Barbecuer { public void BakeMutton() { Console.WriteLine("烤羊肉串!"); } public void BakeChickenWing() { ... 阅读全文
摘要:
在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。代码1:抽象部分,将实现部分剥离后的部分/ public abstract class AbstractRoad { protected AbstractCar car; public AbstractCar Car { set { car = valu... 阅读全文
摘要:
提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。[GOF《设计模式》]在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据。面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责。Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。代码1:迭代器public interface II 阅读全文
摘要:
有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。代码1:叶子节点//人力资源部 class HRDepartment : Company { public HRDepartment(string name) : base(name) { } public override void Add(Company c) { } public override v... 阅读全文
摘要:
备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式。定义(源于GoF《设计模式》):在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。代码1:备忘需求的发起者 class GameRole { //生命力 private int vit; public int Vitality { get { return vit; } ... 阅读全文