美文网首页
<<设计模式之禅(第二版)>>——第九章

<<设计模式之禅(第二版)>>——第九章

作者: leiiiooo | 来源:发表于2016-10-13 09:57 被阅读16次
    定义:
    • 为创建一组相关或者相互依赖的对象提供接口,而且无须指定它们的具体类。
    通用的表示形式:
    • ps:图中的1、2表示等级,A、B表示产品的类型,通过不同的维度做出对应的抽象。
    抽象工厂模式通用类图
    public abstract class AbstractProductA {
      // 定义公共方法
      public void sharedMethod() {
    
      }
    
      // 产品实现的特定方法
      public abstract void doOwnThing();
    }
    
    public abstract class AbstractProductB {
    // 定义公共方法
      public void sharedMethod() {
    
      }
    
      // 产品实现的特定方法
      public abstract void doOwnThing();
    }
    
    
     public class ProductA1 extends AbstractProductA {
    
      @Override
      public void doOwnThing() {
        // TODO Auto-generated method stub
    
        }
    
    }
    public class ProductA2 extends AbstractProductA {
    
      @Override
      public void doOwnThing() {
        // TODO Auto-generated method stub
    
      }
    
    }
    public class ProductB1 extends AbstractProductB {
    
      @Override
      public void doOwnThing() {
        // TODO Auto-generated method stub
    
      }
    
    }
    
    public class ProductB2 extends AbstractProductB {
    
      @Override
      public void doOwnThing() {
        // TODO Auto-generated method stub
    
      }
    
    }
    
    //有N个产品家族,在抽象工厂类中就应该有N个创建方法
    public abstract class AbstractCreator {
      // 产品a家族
      public abstract AbstractProductA createProductA();
    
      // 产品b家族
      public abstract AbstractProductB createProductB();
     }
    
      /*
       * 有多少个产品等级,就有多少个实现类
       * 创建等级1的产品
       * */
    public class Creator1 extends AbstractCreator {
    
      @Override
      public AbstractProductA createProductA() {
        // TODO Auto-generated method stub
        return new ProductA1();
      }
    
      @Override
      public AbstractProductB createProductB() {
        // TODO Auto-generated method stub
        return new ProductB1();
      }
    
    }
    
      /*
       * 创建等级2产品
      * */
    public class Creator2 extends AbstractCreator {
    
      @Override
      public AbstractProductA createProductA() {
        // TODO Auto-generated method stub
        return new ProductA2();
      }
    
      @Override
      public AbstractProductB createProductB() {
        // TODO Auto-generated method stub
        return new ProductB2();
      }
    
    }
    
    
    //情景实用类
    public class Client {
      public static void main(String[] args) {
        //获得两个对应的工厂类
        AbstractCreator c1 = new Creator1();
        AbstractCreator c2 = new Creator2();
        //获得对应的产品对象
        AbstractProductA a1= c1.createProductA();
        AbstractProductA a2 = c2.createProductA();
      }
    }
    
    优点:
    • 具有良好的封装性,高层模块关心的是接口和抽象,并不关心具体的实现类。
    • 可以实现产品族内的约束为非公开状态,对于内部产品的生产约束状态,高层的模块不需要知晓。
    缺点:
    • 严重违反了开闭原则,产品族的拓展难度较大(产品等级的拓展非常容易)
    最佳实践:

    使用抽象工厂模式,屏蔽掉不同的因素对应用的影响。

    相关文章

      网友评论

          本文标题:<<设计模式之禅(第二版)>>——第九章

          本文链接:https://www.haomeiwen.com/subject/hakwyttx.html