将多个工厂类进行抽象来构建抽象工厂模式
工厂模式主要是封装过程,注重结果,以及解耦合
主题接口
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();
}
}