[DesignPattern] 设计之禅读书笔记(三) 抽象工厂模式

  • 抽象工厂模式(Abstract Factory Pattern)

    • Provide an interface for creating families of related or dependent objects without specifying their concerete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。)
    • 优点:
      1. 封装性
      2. 产品族内的约束为非公开状态
    • 缺点:
      1. 产品族扩展非常困难
    • 使用场景:
      • 一个对象(或者一组没有任何关系的对象)都有相同的约束, 则可以使用抽象工厂。比如涉及不同的操作系统的时候可以考虑用抽象工厂模式。
    • 注意事项:
      • 产品族扩展困难,而不是生产线(产品等级,eg下图中的1/2)。也就是说横向扩展容易,纵向扩展难
    • 图列
    • 例子
    public abstract class AbstractProductA{
        public void sharedMethod();
        public abstract doSomething();
    }
    public class ProductA1 exends AbstractA {
        public void doSomthing() {
            //
        }
    }
    public class ProductA2 exends AbstractA {
        public void doSomthing() {
            //
        }
    }
    
    // 有N个产品族,在抽象工厂类中就应该有N个创建方法
    public abstract class AbstractCreator {
        public abstract AbstractProductA createProductA();
        public abstract AbstractProductB createProductB();
    }
    
    // 有M个生产线(产品等级)就应该有M个实现工厂类,在每个实现工厂中,实现不同生产线(产品等级)的生产任务。
    public class Creator1 extends AbstractCreator {
        public AbstractProduceA createProductA{
            return new ProductA1();
        }
        public AbstractProduceB createProductB{
            return new ProductB1();
        }
    }
    
    public class Creator2 extends AbstractCreator {
        public AbstractProduceA createProductA{
            return new ProductA2();
        }
        public AbstractProduceB createProductB{
            return new ProductB2();
        }
    }
    
    
    • 改进:
      • 可以给abstractProduct和abstractCreator都加入interface,这样就更方便使用。

posted on 2020-10-15 06:06  codingEskimo  阅读(77)  评论(0编辑  收藏  举报

导航