随笔分类 -  极速理解设计模式系列

本系列将注重传递面向对象的设计模式思想,对于代码的讲解方面已经有很多大牛讲解,在本系列中不会过多的重复讲述,只是简单的做一个实例。
摘要:五个角色:场景(Context)、抽象表达式(Component)、终结符表达式(TerminalExpression)、非终结符表达式(NonterminalExpression)、客户端(Client) 场景(Context):解释器的全局信息 抽象表达式(Component):定义一个接口来解释操作 终结符表达式(TerminalExpression):直接跳过步骤,不用解释语句 非终结符表达式(NonterminalExpression):根据规则实现解释操作 客户端(Client):调用解释器,对语句进行解释。 实现思路:建立语法树,然后用语法将表达式进行解析。 阅读全文
posted @ 2012-01-09 10:59 .NET架构 阅读(2321) 评论(2) 推荐(6) 编辑
摘要:四个角色:抽象状态类(State)、具体状态类(ConcreateState)、情景类(Context)、客户端(Client) 抽象状态类(State):提供一个与情景类有关的State行为。 具体状态类(ConcreateState):实现这个行为,实现一个状态。 情景类(Context):维护一个State的实例对象,并且提供一个客户操作置换状态的接口。 客户端(Client):直接调用情景类操作即可。 实现思路:直接调用情景类,然后在情景类自动操作或者手动操作置换状态,并且取得不同结果。 阅读全文
posted @ 2011-12-19 12:02 .NET架构 阅读(4558) 评论(1) 推荐(6) 编辑
摘要:四个角色:抽象产品(Product)、具体产品(Concrete Product)、工厂(Creator)、客户端(Client) 抽象产品(Product):需要创建的各种产品的父类。这类产品有共同的接口。 具体产品(Concrete Product):需要创建的具体对象。 工厂(Creator):内部逻辑可以控制生成目标对象。 客户端(Client):实例化工厂,然后工厂根据传入参数得到各种产品。调用产品实现不同功能。 实现思路:首先将工厂实例化,然后使用工厂创建产品赋值给抽象产品的引用,然后通过抽象产品的公共接口调用具体产品的方法以实现功能。 阅读全文
posted @ 2011-12-12 13:41 .NET架构 阅读(2424) 评论(5) 推荐(4) 编辑
摘要:四个角色:抽象类(AbstractClass)、具体子类(ConcreateClass)、客户端(Client) 抽象类(AbstractClass):定义抽象原始操作让其子类可重定义,并且添加一个模板方法定义算法骨架模板,调用原始操作 具体子类(ConcreateClass):实现原始操作方法。 客户端(Client) :实例化具体子类,然后调用模板方法执行子类的原始操作。 实现思路:在客户端实例化具体子类,通过子类实例调用模板方法来按照一定算法执行子类定义的原始操作 阅读全文
posted @ 2011-11-29 10:56 .NET架构 阅读(2244) 评论(0) 推荐(6) 编辑
摘要:四个角色:原发器(Originator)、备忘录(Memento)、看管者(Caretaker)、客户端(Client) 原发器(Originator):需要备忘录来记忆其内部状态的原型。可以将本类状态保存到备忘录,也可以通过备忘录恢复状态。 备忘录(Memento):保持原发器的内部状态, 看管者(Caretaker):看管备忘录,不可修改备忘录。 客户端(Client) :执行原发器保存备忘录可恢复。 实现思路:客户端生产原发器,在原发器保存备忘录到看管者,原发器继续改变其状态,当需要时从看管者那里的备忘录获取已保存的状态以更新自身原发器状态。 阅读全文
posted @ 2011-11-22 14:15 .NET架构 阅读(2095) 评论(2) 推荐(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架构 阅读(8580) 评论(19) 推荐(33) 编辑
摘要:五个角色:抽象命令类(Command)、具体命令类(ConcreteCommand)、调用者(Invoker)、接收者(Receiver)、客户端(Client) 抽象命令类(Command):声明执行操作的接口 具体命令类(ConcreteCommand):内部有一个接收者,调用接收者实现操作。 调用者(Invoker):要求命令执行某个操作 接收者(Receiver):处理具体的操作 客户端(Client):设定好三方链接,调用者直接操作即可。 实现思路:创建一个命令对象,然后设定其接收者,让调用者引用到一个命令对象,最后调用者直接启动操作即可。 阅读全文
posted @ 2011-10-20 10:54 .NET架构 阅读(2228) 评论(2) 推荐(5) 编辑
摘要:五个角色:迭代器(Iterator)、具体迭代器(ConcreteIterator)、聚合(Aggregate)、具体聚合(ConcreteAggregate)、客户端(Client) 迭代器(Iterator):定义遍历和访问元素的接口 具体迭代器(ConcreteIterator):实现迭代器接口并且跟踪聚合对象当前位置 聚合(Aggregate):定义一个迭代器对象接口 具体聚合(ConcreteAggregate):实现迭代器对象,并且返回具体迭代器实例 客户端(Client):调用迭代器对聚合对象进行遍历 实现思路:向具体聚合对象添加元素,然后调用迭代器遍历聚合对象 阅读全文
posted @ 2011-10-18 10:51 .NET架构 阅读(2262) 评论(3) 推荐(5) 编辑
摘要:三个角色:外形类(Facade)、子系统类(SubSystem)、客户端(Client) 外形类(Facade):整合子系统,并且处理客户的请求 子系统类(SubSystem):实现独立的功能,处理Facade任务 客户端(Client): 只需要调用外形类接口即可。 实现思路:客户端调用外形类,在外形类中调用相应的子系统即可。 阅读全文
posted @ 2011-10-10 09:42 .NET架构 阅读(2873) 评论(0) 推荐(4) 编辑
摘要:四个角色:传递者接口(Handler)、具体传递者(ConcreteHandler)、客户端(Client) 传递者接口(Handler):定义一个处理请求的接口和实现下一个对象 具体传递者(ConcreteHandler):如果能够处理就处理,否则让上级处理请求 客户端(Client) :创立责任链,并向链中对象提出请求 实现思路:传递者接口设置上级然后提供一个处理请求的方法,在具体传递中如果能够处理就处理,否则就让其上级来处理,客户端组织其责任链,并且设置请求。 阅读全文
posted @ 2011-10-08 10:51 .NET架构 阅读(2924) 评论(2) 推荐(7) 编辑
摘要:单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。 三要点: 一、单例类只能有一个实例 二、单例类必须自行创建自身实例 三、单例类自行向整个系统提供实例 类图: 应用场景:在整个系统中只需要一个类实例的全局可用类。比如License验证,内存管理等。 分析:其内部有很多需要提供全局访问的方法,对于C#中单例模式有两种创建:双检索单例、饿汉单例。 阅读全文
posted @ 2011-09-29 11:10 .NET架构 阅读(2811) 评论(6) 推荐(4) 编辑
摘要:五个角色:抽象产品角色(AbstractProduct)、具体产品角色(Product)、抽象工厂角色(AbstractFactory)、具体工厂角色(ConcreteFactory)、客户端(Client) 抽象产品角色(AbstractProduct):声明产品接口 具体产品角色(Product):实现产品的接口 抽象工厂角色(AbstractFactory):声明生成对应抽象产品的方法 具体工厂角色(ConcreteFactory):实现生成抽象产品方法,生成产品 客户端(Client):执行生产并运行产品 实现思路:客户端调用具体的工厂角色调用具体的产品角色。 阅读全文
posted @ 2011-09-28 10:32 .NET架构 阅读(2960) 评论(7) 推荐(7) 编辑
摘要:五个角色:产品角色(Product)、真实产品角色(ConcreteProduct)、工厂角色(Creator)、真实工厂角色(ConcreteCreator)、客户端(Client) 产品角色(Product):定义产品接口 真实产品角色(ConcreteProduct):实现产品的接口形成真实产品 工厂角色(Creator):声明工厂的方法并返回一个的产品 真实工厂角色(ConcreteCreator):客户端调用真实工厂返回一个真实产品 客户端(Client):运行并且得到产品 阅读全文
posted @ 2011-09-27 10:17 .NET架构 阅读(2959) 评论(7) 推荐(8) 编辑
摘要:四个角色:抽象策略类(Strategy)、具体策略类(ConcreteStrategy)、场景角色(Context)、客户端(Client) 抽象策略类(Strategy):接口提供动作让场景角色Context调用各种具体策略类的算法。 具体策略类(ConcreteStrategy):实现各种不同的策略算法 场景角色(Context):使用Strategy的引用实例配置场景,并且提供一个接口获取结果。 客户端(Client) :将具体策略类代入场景角色以计算出结果 阅读全文
posted @ 2011-09-26 10:35 .NET架构 阅读(2964) 评论(2) 推荐(7) 编辑
摘要:四个角色:抽象类(Abstraction)、扩充抽象类(RefinedAbstraction)、实现类接口(Implementor)、具体实现类(ConcreteImplementor) 抽象类(Abstraction):主控类,内部有一个实现类接口(Implementor)的对象可调用。 扩充抽象类(RefinedAbstraction):扩充抽象类,个性定制自身行为和属性继承于Abstraction。 实现类接口(Implementor):被操作类。 具体实现类(ConcreteImplementor) :继承并实现Implementor。 阅读全文
posted @ 2011-09-20 10:32 .NET架构 阅读(2548) 评论(10) 推荐(8) 编辑
摘要:四个角色:目标抽象类角色(Target)、目标对象角色(Adapter)、源对象角色(Adaptee)、客户端角色(Client) 目标抽象类角色(Target):定义需要实现的目标接口 目标对象角色(Adapter):调用另外一个源对象,并且转换(适配)为需要的目标对象。 源对象角色(Adaptee):因为提供的功能不能满足现状,需要转换的源对象。 客户端角色(Client):调用目标对象,对源对象进行加工。 阅读全文
posted @ 2011-09-15 10:23 .NET架构 阅读(2512) 评论(5) 推荐(6) 编辑
摘要:四个角色:部件抽象接口角色(Component)、叶角色(Leaf)、组合类角色(Composite)、客户端角色(Client) 部件抽象接口角色(Component):定义组合类对象的公共行为、属性和管理子部件的方法接口。 叶角色(Leaf):实现Component的公共行为,但是无法管理子部件,为最终叶节点。 组合类角色(Composite):实现Component的公共行为,可以管理子节点(增、删、查)。 客户端角色(Client):通过Component控制整棵组合对象树。 阅读全文
posted @ 2011-09-02 10:15 .NET架构 阅读(2568) 评论(4) 推荐(9) 编辑
摘要:四个角色:抽象原型角色(Prototype)、具体原型角色(ConcretePrototype)、原型管理器角色(PrototypeManager)、客户端角色(Client) 抽象原型角色(Prototype):定义原型的克隆方法接口 具体原型角色(ConcretePrototype):实现原型具体的克隆方法 原型管理器角色(PrototypeManager):负责具体原型的增、删、查和原型容器。 客户端角色(Client):实例化多个原型、并且通过原型的克隆接口克隆千千万万个子对象。 实现思路:首先实例化多个原型A、B、C、D,然后在客户端调用A原型的克隆接口即可获取到A原型的克隆子对象,并且可以这个对象的值。 类图: 阅读全文
posted @ 2011-08-30 10:36 .NET架构 阅读(3212) 评论(3) 推荐(9) 编辑
摘要:三个角色:实体接口(Subject),真实实体(RealSubject),代理实体(Proxy) 实体接口(Subject):目标对象的抽象接口 真实实体(RealSubject):目标对象的具体实现. 代理实体(Proxy):同样实现Subject接口,但是在方法内部是调用真实实体的相应方法实现功能点,而非代理类自己去处理事务。 实现思路:真实实体和代理实体都继承并且实现同一个接口,在客户端调用代理实体以达到调用真实实体的目的。 类图: 阅读全文
posted @ 2011-08-25 10:06 .NET架构 阅读(3403) 评论(10) 推荐(10) 编辑
摘要:4个角色:被观察者(Subject/目标对象接口),具体被观察者(ConcreteSubject/具体目标对象),观察者(Observer),具体观察者(ConcreteObserver) 被观察者(Subject/目标对象接口):目标对象的抽象接口 具体被观察者(ConcreteSubject/具体目标对象):目标对象的具体实现,能够添加、删除具体对象并且通知所有的观察者对象。 观察者:观察到目标对象的动作的时候有所反应的接口 具体观察者:观察者对象的具体实现,并且有相关动作。 实现思路:客户端创建目标对象,目标对象添加所有的观察者对象,然后目标对象更新,所有的观察者对象产生反应。 阅读全文
posted @ 2011-08-22 11:11 .NET架构 阅读(4016) 评论(11) 推荐(9) 编辑