摘要: 四个角色:抽象产品(Product)、具体产品(Concrete Product)、工厂(Creator)、客户端(Client) 抽象产品(Product):需要创建的各种产品的父类。这类产品有共同的接口。 具体产品(Concrete Product):需要创建的具体对象。 工厂(Creator):内部逻辑可以控制生成目标对象。 客户端(Client):实例化工厂,然后工厂根据传入参数得到各种产品。调用产品实现不同功能。 实现思路:首先将工厂实例化,然后使用工厂创建产品赋值给抽象产品的引用,然后通过抽象产品的公共接口调用具体产品的方法以实现功能。 阅读全文
posted @ 2011-12-12 13:41 .NET架构 阅读(2423) 评论(5) 推荐(4) 编辑
摘要: 在PostSharp中得LocationInterceptionAspect类是针对属性或字段的面向方面截取。继承与它的特性将可以截取初始化属性、设置属性、获取属性等时候的数据,并且可以在这几个过程中针对属性进行附加控制。 这个类里面有三个主要的函数可以重载分别是RuntimeInitialize(LocationInfo locationInfo)、OnSetValue(LocationInterceptionArgs args)、OnGetValue(LocationInterceptionArgs args)。他们分别意义如下: RuntimeInitialize(LocationInfo locationInfo):初始化包含属性或字段的类的时候运行此函数,增加控制代码,可以截取到运行此属性或字段的类信息,属性类型等信息 阅读全文
posted @ 2011-12-06 11:44 .NET架构 阅读(1417) 评论(0) 推荐(6) 编辑
摘要: 四个角色:抽象类(AbstractClass)、具体子类(ConcreateClass)、客户端(Client) 抽象类(AbstractClass):定义抽象原始操作让其子类可重定义,并且添加一个模板方法定义算法骨架模板,调用原始操作 具体子类(ConcreateClass):实现原始操作方法。 客户端(Client) :实例化具体子类,然后调用模板方法执行子类的原始操作。 实现思路:在客户端实例化具体子类,通过子类实例调用模板方法来按照一定算法执行子类定义的原始操作 阅读全文
posted @ 2011-11-29 10:56 .NET架构 阅读(2239) 评论(0) 推荐(6) 编辑
摘要: 首先我们下载PostSharp 2.1.5.1,选择精简版本(价格为0美元)下订单地址是:http://www.sharpcrafters.com/purchase/compare,。我们需要注册一个OpenID,然后购买下来,它会发送一个精简版的License到你的注册邮箱中。点击PostSharp2.1.5.1安装文件输入Lincense即可完成。 PostSharp是编译时将IL语言静态注入程序中,在免费版本中我们能够使用PostSharp对方法、字段和属性进行AOP截取数据而不能对事件进行AOP截取。下面我们来看看针对方法、字段和属性的AOP处理类: OnMethodBoundaryAspect 继承于此类的特性A将围绕整个方法B进行静态注入式的处理,这个特性A可以重载覆写OnMethodBoundaryAspect类的 阅读全文
posted @ 2011-11-28 11:09 .NET架构 阅读(2740) 评论(5) 推荐(3) 编辑
摘要: 四个角色:原发器(Originator)、备忘录(Memento)、看管者(Caretaker)、客户端(Client) 原发器(Originator):需要备忘录来记忆其内部状态的原型。可以将本类状态保存到备忘录,也可以通过备忘录恢复状态。 备忘录(Memento):保持原发器的内部状态, 看管者(Caretaker):看管备忘录,不可修改备忘录。 客户端(Client) :执行原发器保存备忘录可恢复。 实现思路:客户端生产原发器,在原发器保存备忘录到看管者,原发器继续改变其状态,当需要时从看管者那里的备忘录获取已保存的状态以更新自身原发器状态。 阅读全文
posted @ 2011-11-22 14:15 .NET架构 阅读(2093) 评论(2) 推荐(6) 编辑
摘要: AOP(基于切面编程):它是对业务逻辑的分离,使各个业务直接的耦合变低,比如在传统的OOP编程中将日志记录、异常处理、权限管理等方面剥离出来。在今后的维护过程中,对其改变日志记录、异常处理、权限管理方法的时候,不用去改变主业务流程逻辑代码。提高开发效率。 PostSharp采用特性的方式来对编译后的主业务流程方法逻辑横向静态注入截取数据。下面我们将以一个实例来演示如何使用PostSharp实现AOP进行日志记录和异常处理。 首先需要安装PostSharp 2.1.4.1免费版本,这个版本只是功能相对较少,可商用,能够满足日志记录和异常截取的要求。点击PostSharp-2.1.4.1 下载. 阅读全文
posted @ 2011-11-21 11:29 .NET架构 阅读(4315) 评论(4) 推荐(9) 编辑
摘要: 在Silverlight中新增了对OpenType字体属性的支持,它主要通过Typography类的相关属性来控制。下面我们来看看它增加了哪些属性。 注意:必须使用系统的OpenType字体才行,所以FontFamily="Gabriola"。 一、连笔字 在"ft"之间相连起来,如下图绿色框内所示主要通过 Typography.StandardLigatures的True或者False来决定是否连笔: 阅读全文
posted @ 2011-11-14 13:04 .NET架构 阅读(1940) 评论(11) 推荐(6) 编辑
摘要: 在Silverlight 5 RC版本中对字体呈现做出了比较大的优化,它现在新增了一个类TextOptions,其内部有三个依赖属性TextFormattingMode、TextHintingMode、TextRenderingMode。对字体的呈现模式进行了定义。 1.TextFormattingMode 它有两种格式化模式,是对字体的格式化进行设置 1.1 Display:它使用度量来格式化字体和符号,会让字体显示得更加清晰, 1.2 Ideal:它是老的模式,相对没有那么清晰 2.TextHintingMode 它有两种微调模式,是对字体的渲染模式设置是否关闭 2.1 Fixed:默认的模式,采用渲染模式 2.2 阅读全文
posted @ 2011-11-09 11:14 .NET架构 阅读(2234) 评论(5) 推荐(6) 编辑
摘要: 在Silverlight 5 RC版本中新增了对并行任务库(Task Parallel Library)的支持,Task Parallel Library简称TPL,它是指一个或者多个任务同时运行,类似线程或者线程池。在本例中将会以并行任务库和异步获取数据进行对比。相关资料可以看http://msdn.microsoft.com/en-us/library/dd537609.aspx和http://www.cnblogs.com/vwxyzh/tag/TPL/ 首先新建一个Silverlight 5项目,在其Web项目中添加一个新的xml文件helloWorld.xml。编写代码如下: 阅读全文
posted @ 2011-11-07 11:09 .NET架构 阅读(2015) 评论(2) 推荐(4) 编辑
摘要: 它将为在浏览器模式下运行的应用程序提升一些访问权限,例如我的上篇SaveFileDialog保存文件指定默认名称---OpenFileDialog打开文件指定默认路径就需要提升权限。另外在其OOB模式下也进行了相应的提升,比如访问WIN 32 API,或者访问在C:\Windows\System32目录下的自己编写的DLL文件。 A:在OOB模式下的提升权限来访问WIN32API。 阅读全文
posted @ 2011-11-01 10:59 .NET架构 阅读(2788) 评论(11) 推荐(6) 编辑
摘要: 这是一个老生常谈的设计模式系列文章,本系列力图从最简洁的语言和最易理解的实例来让大家认识设计模式的思想和思路,从而在实际项目中能够用到一二。现在将本系列文章详列如下: 极速理解设计模式系列:1.建造者模式(Builder Pattern) 极速理解设计模式系列:2.观察者模式(Observer Pattern) 极速理解设计模式系列:3.代理模式(Proxy Pattern) 极速理解设计模式系列:4.原型模式(Prototype Pattern) 极速理解设计模式系列:5.组合模式(Composite Pattern) 极速理解设计模式系列:6.适配器模式(Adapter Pattern) 极速 阅读全文
posted @ 2011-10-31 11:17 .NET架构 阅读(8569) 评论(19) 推荐(33) 编辑
摘要: 六个角色:抽象访问者(Visitor)、具体访问者(ConcreteVisitor)、抽象元素(Element)、具体元素(ConcreteElement)、对象结构类(ObjectStructure)、客户端(Client) 抽象访问者(Visitor):抽象出访问元素的动作 具体访问者(ConcreteVisitor):实现访问元素的动作 抽象元素(Element):定义一个接受访问的操作,其参数为访问者 具体元素(ConcreteElement):实现接受访问操作 对象结构类(ObjectStructure):可以枚举元素,并且管理元素 客户端(Client) :定义元素集合,然后接受不同访问者的访问 实现思路:向对象结构类 阅读全文
posted @ 2011-10-24 12:32 .NET架构 阅读(7341) 评论(10) 推荐(9) 编辑
摘要: 五个角色:抽象命令类(Command)、具体命令类(ConcreteCommand)、调用者(Invoker)、接收者(Receiver)、客户端(Client) 抽象命令类(Command):声明执行操作的接口 具体命令类(ConcreteCommand):内部有一个接收者,调用接收者实现操作。 调用者(Invoker):要求命令执行某个操作 接收者(Receiver):处理具体的操作 客户端(Client):设定好三方链接,调用者直接操作即可。 实现思路:创建一个命令对象,然后设定其接收者,让调用者引用到一个命令对象,最后调用者直接启动操作即可。 阅读全文
posted @ 2011-10-20 10:54 .NET架构 阅读(2220) 评论(2) 推荐(5) 编辑
摘要: 五个角色:迭代器(Iterator)、具体迭代器(ConcreteIterator)、聚合(Aggregate)、具体聚合(ConcreteAggregate)、客户端(Client) 迭代器(Iterator):定义遍历和访问元素的接口 具体迭代器(ConcreteIterator):实现迭代器接口并且跟踪聚合对象当前位置 聚合(Aggregate):定义一个迭代器对象接口 具体聚合(ConcreteAggregate):实现迭代器对象,并且返回具体迭代器实例 客户端(Client):调用迭代器对聚合对象进行遍历 实现思路:向具体聚合对象添加元素,然后调用迭代器遍历聚合对象 阅读全文
posted @ 2011-10-18 10:51 .NET架构 阅读(2257) 评论(3) 推荐(5) 编辑
摘要: 五个角色:抽象中介者(Mediator)、具体中介者(ConcreteMediator)、同事类(Colleague)、具体同事类(ConcreteColleague)、客户端(Client) 抽象中介者(Mediator):定义接口让同事对象之间通讯 具体中介者(ConcreteMediator):实现接口,并且协调维护同事对象 同事类(Colleague):其内部引用中介者对象,并且提供一个接口发送消息 具体同事类(ConcreteColleague):实现接口,向中介者发送消息 客户端(Client) :让具体同事类认识中介者,并且让中介者认识同事,然后同事发送消息即可。 实现思路:客户端让中介者和同事互相认识,然后同事向中介者发送消息,中介者 阅读全文
posted @ 2011-10-17 10:48 .NET架构 阅读(2518) 评论(4) 推荐(5) 编辑
摘要: 五个角色:抽象轻量级类(Flyweight)、具体轻量级类(ConcreteFlyweight)、不共享具体轻量级类(UnsharedConcreteFlyweight)、轻量级类工厂(FlyweightFactory)、客户端(Client) 抽象轻量级类(Flyweight):声明一个接口并且有一些属性可以设置对象的状态 具体轻量级类(ConcreteFlyweight):实现接口,并且有相关的状态 不共享具体轻量级类(UnsharedConcreteFlyweight):不被共享的具体轻量级类 轻量级类工厂(FlyweightFactory):创建并且管理Flyweight对象,当客户端发出轻量级类请求时提供一个已创建或者未创建的对象 客户端(Clie 阅读全文
posted @ 2011-10-12 10:31 .NET架构 阅读(2549) 评论(4) 推荐(5) 编辑
摘要: 三个角色:外形类(Facade)、子系统类(SubSystem)、客户端(Client) 外形类(Facade):整合子系统,并且处理客户的请求 子系统类(SubSystem):实现独立的功能,处理Facade任务 客户端(Client): 只需要调用外形类接口即可。 实现思路:客户端调用外形类,在外形类中调用相应的子系统即可。 阅读全文
posted @ 2011-10-10 09:42 .NET架构 阅读(2862) 评论(0) 推荐(4) 编辑
摘要: 四个角色:传递者接口(Handler)、具体传递者(ConcreteHandler)、客户端(Client) 传递者接口(Handler):定义一个处理请求的接口和实现下一个对象 具体传递者(ConcreteHandler):如果能够处理就处理,否则让上级处理请求 客户端(Client) :创立责任链,并向链中对象提出请求 实现思路:传递者接口设置上级然后提供一个处理请求的方法,在具体传递中如果能够处理就处理,否则就让其上级来处理,客户端组织其责任链,并且设置请求。 阅读全文
posted @ 2011-10-08 10:51 .NET架构 阅读(2911) 评论(2) 推荐(7) 编辑
摘要: 单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。 三要点: 一、单例类只能有一个实例 二、单例类必须自行创建自身实例 三、单例类自行向整个系统提供实例 类图: 应用场景:在整个系统中只需要一个类实例的全局可用类。比如License验证,内存管理等。 分析:其内部有很多需要提供全局访问的方法,对于C#中单例模式有两种创建:双检索单例、饿汉单例。 阅读全文
posted @ 2011-09-29 11:10 .NET架构 阅读(2801) 评论(6) 推荐(4) 编辑
摘要: 五个角色:抽象产品角色(AbstractProduct)、具体产品角色(Product)、抽象工厂角色(AbstractFactory)、具体工厂角色(ConcreteFactory)、客户端(Client) 抽象产品角色(AbstractProduct):声明产品接口 具体产品角色(Product):实现产品的接口 抽象工厂角色(AbstractFactory):声明生成对应抽象产品的方法 具体工厂角色(ConcreteFactory):实现生成抽象产品方法,生成产品 客户端(Client):执行生产并运行产品 实现思路:客户端调用具体的工厂角色调用具体的产品角色。 阅读全文
posted @ 2011-09-28 10:32 .NET架构 阅读(2950) 评论(7) 推荐(7) 编辑
摘要: 五个角色:产品角色(Product)、真实产品角色(ConcreteProduct)、工厂角色(Creator)、真实工厂角色(ConcreteCreator)、客户端(Client) 产品角色(Product):定义产品接口 真实产品角色(ConcreteProduct):实现产品的接口形成真实产品 工厂角色(Creator):声明工厂的方法并返回一个的产品 真实工厂角色(ConcreteCreator):客户端调用真实工厂返回一个真实产品 客户端(Client):运行并且得到产品 阅读全文
posted @ 2011-09-27 10:17 .NET架构 阅读(2952) 评论(7) 推荐(8) 编辑
摘要: 四个角色:抽象策略类(Strategy)、具体策略类(ConcreteStrategy)、场景角色(Context)、客户端(Client) 抽象策略类(Strategy):接口提供动作让场景角色Context调用各种具体策略类的算法。 具体策略类(ConcreteStrategy):实现各种不同的策略算法 场景角色(Context):使用Strategy的引用实例配置场景,并且提供一个接口获取结果。 客户端(Client) :将具体策略类代入场景角色以计算出结果 阅读全文
posted @ 2011-09-26 10:35 .NET架构 阅读(2953) 评论(2) 推荐(7) 编辑
摘要: 四个角色:抽象类(Abstraction)、扩充抽象类(RefinedAbstraction)、实现类接口(Implementor)、具体实现类(ConcreteImplementor) 抽象类(Abstraction):主控类,内部有一个实现类接口(Implementor)的对象可调用。 扩充抽象类(RefinedAbstraction):扩充抽象类,个性定制自身行为和属性继承于Abstraction。 实现类接口(Implementor):被操作类。 具体实现类(ConcreteImplementor) :继承并实现Implementor。 阅读全文
posted @ 2011-09-20 10:32 .NET架构 阅读(2533) 评论(10) 推荐(8) 编辑
摘要: 四个角色:目标抽象类角色(Target)、目标对象角色(Adapter)、源对象角色(Adaptee)、客户端角色(Client) 目标抽象类角色(Target):定义需要实现的目标接口 目标对象角色(Adapter):调用另外一个源对象,并且转换(适配)为需要的目标对象。 源对象角色(Adaptee):因为提供的功能不能满足现状,需要转换的源对象。 客户端角色(Client):调用目标对象,对源对象进行加工。 阅读全文
posted @ 2011-09-15 10:23 .NET架构 阅读(2502) 评论(5) 推荐(6) 编辑
摘要: Silverlight 5 的RC版本已经出来了,本文将讲解RC版本中一个非常实用的小功能,SaveFileDialog保存文件指定默认名称和OpenFileDialog打开文件指定默认路径。本文使用 Silverlight实用窍门系列:50.InkPresenter涂鸦板的基本使用,以及将效果保存为Png图片的源码实例。 一、SaveFileDialog保存文件指定默认名称 在SaveFileDialog类中新增了一个属性DefaultFileName即可指定想要保存的文件的默认名称。下面请看代码如下: 阅读全文
posted @ 2011-09-13 11:10 .NET架构 阅读(11085) 评论(4) 推荐(5) 编辑