设计模式学习笔记(三)

抽象工厂模式(Abstract Factory Pattern)

  抽象工厂模式提供了一个接口,用于创建相关或者依赖对象的家族,而不需要指定具体实现类.

  抽象工厂模式允许客户使用抽象接口来创建一组相关的产品,客户类和工厂类分开,客户需要任何产品的时候只需要向工厂请求即可,客户无需修改就可以获得新产品.

  设计原则

  1.多用对象组合,少用继承

  抽象工厂模式告诉我们要多用对象组合,少用继承(是少用而不是不用),这是因为继承的方式会存在一定的依赖性,基类的改变对子类的影响相对于对象组合来说较大,因此要多用组合,少用继承.

  2.针对抽象编程,不针对实现编程

  当设计一个软件系统的时候,要尽可能的对软件系统中出现的各种事物进行抽象,从而建立基础的抽象底层,这样做的目的就是让软件结构更加框架化、系统化,系统结构更加灵活,易维护、已扩展.

  3.产品对象通过工厂暴露的方法创建

  抽象工厂模式对于对象的解耦方面是显而易见的,在客户类中,没有使用创建对象的实例的语句,而是调用抽象工厂暴露的方法获得对象的实例,创建具体对象实例的工作全部都是在具体工厂中实现的.

  使用场合

  1.创建产品家族,相关产品集合在一起使用的时候;

  2.想要提供一个产品类库,并只想显示其接口而不是实现时;

  3.通过组合方式使用工厂时;

  抽象工厂模式提供了一个接口,用于创建相关或者依赖对象的家族,而不需要指定具体实现类.抽象工厂模式是指当有多个抽象角色时使用的一种工厂模式.抽象工厂模式可以想客户端提供一个接口,使用客户端在不必指定具体产品的情况下,创建多个产品族中的产品对象.当有多个抽象产品角色时,工厂方法模式已经不能满足要求.

  抽象工厂和工厂方法的比较

  首先,抽象工厂模式和工厂方法模式都是工厂模式,这点是毋庸置疑的.它们都实现了将应用程序从特定的实现类中解耦,然而,这两种设计模式存在以下几点重要的区别:工厂方法是通过继承的方式实现应用程序的解耦,而抽象工厂模式则通过对象组合的方式实现应用程序解耦;工厂方法模式用来创建一个抽象产品,具体工厂实现工厂方法来创建具体产品,而抽象工厂模式用来创建一个产品家族的抽象类型.虽然,两种设计模式使用不同的的方式实现应用程序的解耦,使用场合也有所区别,但是,两者还是有联系的,例如,在抽象工厂模式的具体工厂就是通过工厂方法模式创建的产品.

  抽象工厂方法模式

  

  抽线工厂模式

  

posted on 2013-02-24 18:36  芝明  阅读(152)  评论(0编辑  收藏  举报

导航