上一页 1 ··· 23 24 25 26 27 28 29 30 31 ··· 42 下一页
摘要: 应用场景:在软件的构建过程中,对象的状态改变之后,对象的行为也会随之改变,如何在运行时根据对象的状态透明的更改对象的行为就是state模式解决的问题。实现代码: // 抽象类,表达状态的依赖状态行为 abstract class StateDocument { public abstract void Handler1(); public abstract void Handler2(); public abstract void Handler3(); public abstract StateDocument Next { get; set; } } class ReadOnlyState 阅读全文
posted @ 2010-07-24 20:13 qiang.xu 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 应用场景:在软件的构建过程中,某些对象使用的算法可能多种多样,如果将这些算法直接编码到使用的类中的,这些类的维护旧就成为一个问题。解决的思路是“封装变化点”,将算法首先抽象出一个父类,然后在使用这些算法的类中只保留父类的引用,而传递的就是具体类。实现代码: class Program { static void Main(string[] args) { // 这里动态改变,动态更改算法。 Car car = new Car(new ProcessStrtategyA()); } } enum CarType { A, B, C, D } // 算法抽象 阅读全文
posted @ 2010-07-24 19:58 qiang.xu 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 应用场景:在软件构建过程中,由于需求的变化,某些类层次常常需要新增加新的行为,如果直接改变基类的方法的话,将给子类的维护带来巨大的灾难。解决的思路是使用visitor模式,需要新增加方法的类是不需要改动的,只要实现相应的接口即可。这里是英文解释:Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it o 阅读全文
posted @ 2010-07-24 19:51 qiang.xu 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 应用场景:在软件的构建过程中,某些对象的状态在转换的过程中,可能由于某种的需要,要求程序能够回溯到以前的状态。Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later.仅仅是在外部新增加一个类,然后在这个类中保存类的状态信息。实现代码: // 只是封装状态,而不封装其他的方法。 class Rectangle : ICloneable { int x; int y; 阅读全文
posted @ 2010-07-23 21:59 qiang.xu 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 应用场景:Chain the receiving objects and pass the request along the chain until an object handles it.实现代码: class Request { } abstract class BaseHandler { public BaseHandler(BaseHandler next) { this.next = next; } // 下一个可能处理这个request的对象 // 这里相当于链表 private BaseHandler next; public BaseHandler Next { get { 阅读全文
posted @ 2010-07-23 20:47 qiang.xu 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 应用场景:在软件的构建构成中,经常存在多个对象相互交互的情况,这样的话,一个类的改变的话,其他关联的对象都需要改变。解决的办法是在各个对象之间增加一个Mediator中介者,使用这个对象来管理这些对象的交互。实现代码:第一种:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Mediator{ class Program { static void Main(string[] args) { ChatRoom cr = new ChatRoom(); Parti 阅读全文
posted @ 2010-07-23 16:57 qiang.xu 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 应用场景:Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.给定一个语言,定义它的发文的一种的表示,并定义一种解释器,使用这个解释器来解释这些句子。实现代码: class Program { static void Main(string[] args) { string roman = "MCMXXVIII"; Conte 阅读全文
posted @ 2010-07-23 14:48 qiang.xu 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 应用场景:通常的情况下,直接new完一个类之后,然后调用这个类的办法,但是在实际的项目中存在需要存在“重做”等功能,这样就需要使用command模式来实现。实现代码: class Program { static void Main(string[] args) { User user = new User(); user.Compute('+', 100); user.Compute('-', 50); user.Compute('*', 10); user.Compute('/', 2) 阅读全文
posted @ 2010-07-23 14:21 qiang.xu 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 应用场景:在软件的设计中,通常软件的结构是相对固定的,但是子步骤是相对变化的,即算法的骨架是固定,实现延迟到子类中实现。实现代码: class Program { static void Main(string[] args) { VehicaltestFramework.DoTest(new HongqiCar()); } } // 框架开发者-先开发 public abstract class Vehical { // 这些方法可以实现或者是不实现,根据具体的应用 // 来决定。 public abstract void Startup(); public abstract void Ru 阅读全文
posted @ 2010-07-22 14:55 qiang.xu 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 应用场景:在面向对象设计中,为某个对象提供一中代理,控制对这个对象的访问,例如可以实现缓存,分布式程序中调用远程对象。实现代码: public interface IEmployee { public void GetSalary(); public void Report(); public void ApplyVacation(); } public Employee : IEmployee { } // 客户端直接使用这个代理来访问emplooyee类 class EmployeeProxy : IEmployee { // 使用soap协议实现web service public v 阅读全文
posted @ 2010-07-22 14:18 qiang.xu 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 应用场景:解决在系统中存在大量细小对象耗费内存的情况。实现代码: // 参考:http://java.chinaitlab.com/model/795882_2.html public abstract class Flyweight { public abstract void Operation(); } public class ConcreteFlyWeight : Flyweight { private string str; public ConcreteFlyWeight(string str) { this.str = str; } public override void O 阅读全文
posted @ 2010-07-22 10:50 qiang.xu 阅读(234) 评论(0) 推荐(0) 编辑
摘要: If you want to share files between your Ubuntu and Windows computers, your best option is to use Samba file sharing.To install, first open a terminal window and enter the following command:sudo apt-get install samba smbfsWe’ve got samba installed, but now we’ll need to configure 阅读全文
posted @ 2010-07-22 09:29 qiang.xu 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 1。要确保VMware Network Adapter for VMnet8 处于启用状态,这个是NAT网络模式要用的虚拟网卡(提示:停用主机虚拟网卡VMware Network Adapter VMnet8,虚拟机是可以上网的,但是虚拟机无法和主机组成局域网了,为了避免新手出现更多的问题,所以我在教程里建议大家把VMware Network Adapter VMnet8启用).注意这个网卡的ip地址,不需要做手动设置,切记!!!2.如果这个时候,虚拟机还是不可以上网.我建议你检查一下以下几个地方,确保NAT上网的几个服务已经启动.具体操作如下:开始---设置--控制面板---管理工具---服 阅读全文
posted @ 2010-07-22 08:43 qiang.xu 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 应用场景:客户代码过多的依赖对象容器的复杂的内部实现,对象容器内部的变化将导致客户端的代码的剧烈变化。将客户代码和对象容器解耦,从而更能够应对变化。实现代码: public interface IBox { void Process(); void Add(IBox box); void Remove(IBox box); } public class SingleBox : IBox { public void Process() { // do process for myself } public void Add(IBox box) { // 两个实现方案 // 1. do noth 阅读全文
posted @ 2010-07-21 13:40 qiang.xu 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 应用场景:解决的是在需求中,面临两个需求维度的变化的话,可以使用Bridge模式。实现代码: //------------------------------------------------------- // Tank 2.0 // 两个方向的变化,一中是平台,另外一中是类型的变化。 // 将事物中多个维度的变化分离,使得其能够独立的变化。 // 一个类只能有一个变化原因。 //--------------------------------------------------------------- public abstract class Tank { protected Tan 阅读全文
posted @ 2010-07-21 12:33 qiang.xu 阅读(176) 评论(0) 推荐(0) 编辑
上一页 1 ··· 23 24 25 26 27 28 29 30 31 ··· 42 下一页