随笔分类 -  设计模式

工厂方法 (Factory Method) 创建型模式
摘要:概述:在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?意图:定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory Method模式通过面向对象的手法,将所要创建的具体对象的创建工作延迟到子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。实质: 在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。在子类的内部创建对象通常比直接 阅读全文
posted @ 2012-12-28 18:25 雇佣兵333 阅读(747) 评论(0) 推荐(0)
代理模式(Proxy Pattern) 结构型模式
摘要:概述: 在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。意图:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。实质: 代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式的使用目的不同,代理模式又可以分为多种类型,例如保护代理、远程代理、虚拟代理、缓冲代理等,它们应用于不.. 阅读全文
posted @ 2012-12-27 17:50 雇佣兵333 阅读(1244) 评论(0) 推荐(1)
装饰模式(Decorator) 结构型模式
摘要:概述:装饰模式又名包装(Wrapper)模式,是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。意图:动态方式给一个对象附加更多的功能。装饰模式可以在不创造更多的子类的情况下扩张对象的功能。动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活(为什么比继承要好,后面会讲到)。实现对客户端透明 (怎么实现,后面会讲到)实质: 实现对客户端透明的方式扩展对象的功能。使用场景:主要是解决:“过度地使用了继承来扩展对象的功能”,由于继承为类型引入的静态特质(以继承的方式使某一类型要获得功能是在编译时是静态的,动态,是指在运行时),使得这种扩展方式缺乏灵活性;并且 阅读全文
posted @ 2012-12-18 18:10 雇佣兵333 阅读(952) 评论(0) 推荐(1)
策略模式(Strategy) 对象的行为型模式
摘要:概述: 策略模式属于对象的行为模式(has-a, not is-a)。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。意图:策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。运行期间,策略模式在每一个时刻只能使用一个具体的策略实现对象,虽然可以动态地在不同的策略实现中切换,但是同 阅读全文
posted @ 2012-12-17 18:38 雇佣兵333 阅读(1143) 评论(1) 推荐(2)
简单工厂模式(Simple Factory) 创建型模式
摘要:概述 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。意图 专门定义一个工厂类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。工厂类负责根据一定的条件创建某一具体类的实例,客户端不参与创建具体产品,仅通过传入参数选择需要“消. 阅读全文
posted @ 2012-12-14 18:31 雇佣兵333 阅读(301) 评论(0) 推荐(0)
单例模式(Singleton Pattern) 创建型模式
摘要:概述: Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任。 从另一个角度来说,Singleton模式其实也是一种职责型模式。因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责!意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。UML图:实质:有一个私有的无参构造函数,这可以防止其他... 阅读全文
posted @ 2012-12-14 18:11 雇佣兵333 阅读(1006) 评论(1) 推荐(0)