工厂模式之抽象工厂模式

将多个工厂类进行抽象来构建抽象工厂模式
工厂模式主要是封装过程,注重结果,以及解耦合

主题接口
package factory.abs;

/**
 * @author :  freedom
 * @Description :  不同颜色的主题接口
 * @Creation Date:  2019-11-17 7:57 上午
 */
public interface ISkin {

  void display();

}
主题
绿色主题
package factory.abs;

/**
 * @author :  freedom
 * @Description :  绿色主题类
 * @Creation Date:  2019-11-17 8:00 上午
 */
public class GreenSkin implements ISkin {

  @Override
  public void display() {
    System.out.println("显示绿色主题");
  }
}
蓝色主题
package factory.abs;

/**
 * @author :  freedom
 * @Description :  蓝色主题类
 * @Creation Date:  2019-11-17 7:59 上午
 */
public class BlueSkin implements ISkin {


  @Override
  public void display() {
    System.out.println("显示蓝色主题");
  }
}
灰色主题
package factory.abs;

/**
 * @author :  freedom
 * @Description :  灰色主题类
 * @Creation Date:  2019-11-17 8:01 上午
 */
public class GraySkin implements ISkin {

  @Override
  public void display() {
    System.out.println("显示灰色主题");
  }
}
抽象主题工厂接口
package factory.abs;

/**
 * @author :  freedom
 * @Description :  创建主题工厂接口
 * @Creation Date:  2019-11-17 8:21 上午
 */
public interface ISkinFactory {

  /**
   *
   * @return 创建主题
   */
  ISkin createSkin();
}
主题工厂
绿色主题工厂
package factory.abs;

/**
 * @author :  freedom
 * @Description :  生成绿色主题的工厂
 * @Creation Date:  2019-11-17 8:21 上午
 */
public class GreenSkinFactory implements ISkinFactory {

  /**
   * @return 创建主题
   */
  @Override
  public ISkin createSkin() {
    return new GreenSkin();
  }
}
蓝色主题工厂
package factory.abs;

/**
 * @author :  freedom
 * @Description :  生成蓝色主题的工厂
 * @Creation Date:  2019-11-17 8:23 上午
 */
public class BlueSkinFactory implements ISkinFactory {

  /**
   * @return 创建主题
   */
  @Override
  public ISkin createSkin() {
    return new BlueSkin();
  }
}

灰色主题工厂
package factory.abs;

/**
 * @author :  freedom
 * @Description :  生成灰色主题的工厂
 * @Creation Date:  2019-11-17 8:23 上午
 */
public class GraySkinFactory implements ISkinFactory {

  /**
   * @return 创建主题
   */
  @Override
  public ISkin createSkin() {
    return new GraySkin();
  }
}

抽象工厂类
package factory.abs;

/**
 * @author :  freedom
 * @Description :  主题抽象工厂类
 * @Creation Date:  2019-11-17 8:02 上午
 */
public abstract class AbstractSkinFactory {

  protected abstract ISkin getSkin();
  //根据不同的输入显示不同的主题
  public ISkin getSkin(String skinName){
    if("GRAY".equalsIgnoreCase(skinName)){
      return  new GraySkinFactory().createSkin();
    }else if("GREEN".equalsIgnoreCase(skinName)){
      return new GreenSkinFactory().createSkin();
    }else if("BLUE".equalsIgnoreCase(skinName)){
      return new BlueSkinFactory().createSkin();
    }else{
      System.out.printf("主题正在制作中");
      return null;
    }

  }
}

默认工厂类
package factory.abs;

/**
 * @author :  freedom
 * @Description :   默认生成绿色主题类
 * @Creation Date:  2019-11-17 8:06 上午
 */
public class DefaultFactory extends AbstractSkinFactory {

  @Override
  protected ISkin getSkin() {
    return new GreenSkinFactory().createSkin();
  }
}
package factory.abs;

/**
 * @author :  freedom
 * @Description :   默认生成绿色主题类
 * @Creation Date:  2019-11-17 8:06 上午
 */
public class DefaultFactory extends AbstractSkinFactory {

  @Override
  protected ISkin getSkin() {
    return new GreenSkinFactory().createSkin();
  }
}

测试抽象主题工厂
package factory.abs;

/**
 * @author :  freedom
 * @Description :  抽象工厂测试类
 * @Creation Date:  2019-11-17 8:06 上午
 */
public class AbstractFactoryTest {

  public static void main(String[] args) {
    //创建默认工厂
    DefaultFactory defaultFactory = new DefaultFactory();
    //默认工厂默认显示绿色主题
    defaultFactory.getSkin().display();
    //调用蓝色主题
    defaultFactory.getSkin("BLUE").display();
  }
}

测试结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bigdatafreedom

你的鼓励奖是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值