软件设计--抽象工厂模式
就我的理解来说,抽象工厂模式就是,创建接口和抽象类,把分类逐渐总到一起~
使用抽象工厂模式,完成上述产品等级结构:
先对性别进行分类:
package Tutorial04; public interface Person { public String Is(); }
package Tutorial04; public class Man implements Person{ @Override public String Is() { return "男人"; } }
package Tutorial04; public class Woman implements Person{ @Override public String Is() { return "女人"; } }
再对肤色进行分类:
package Tutorial04; public interface Color { public String SurfaceIs(); }
package Tutorial04; public class Yellow implements Color { @Override public String SurfaceIs() { return "Yellow"; } }
package Tutorial04; public class White implements Color{ @Override public String SurfaceIs() { return "White"; } }
package Tutorial04; public class Black implements Color{ @Override public String SurfaceIs() { return "Black"; } }
然后创建抽象工厂(同时创建性别和肤色工厂),来获取性别和肤色工厂:
package Tutorial04; public abstract class AbstractFactory { public abstract Color getColor(String color); public abstract Person getPerson(String person); }
package Tutorial04; public class PersonFactory extends AbstractFactory{ @Override public Person getPerson(String person) { if(person==null){ return null; } if(person.equalsIgnoreCase("Man")){ return new Man(); } else if (person.equalsIgnoreCase("Woman")) { return new Woman(); } return null; } @Override public Color getColor(String color) { return null; } }
package Tutorial04; public class ColorFactory extends AbstractFactory{ @Override public Color getColor(String color) { if(color == null){ return null; } if(color.equalsIgnoreCase("Yellow")){ return new Yellow(); } else if (color.equalsIgnoreCase("Black")) { return new Black(); } else if (color.equalsIgnoreCase("White")) { return new White(); } return null; } @Override public Person getPerson(String person) { return null; } }
然后创建工厂生成器:
package Tutorial04; public class FactoryProducer { public static AbstractFactory getFactory(String choice){ if(choice.equalsIgnoreCase("Person")){ return new PersonFactory(); } else if (choice.equalsIgnoreCase("Color")) { return new ColorFactory(); } return null; } }
最后实现:
package Tutorial04; public class AbstractFactoryPatternDemo { public static void main(String[] args) { AbstractFactory personFactory = FactoryProducer.getFactory("Person"); Man man = (Man) personFactory.getPerson("Man"); Woman woman = (Woman) personFactory.getPerson("Woman"); AbstractFactory colorFactory = FactoryProducer.getFactory("Color"); Yellow yellow = (Yellow) colorFactory.getColor("Yellow"); Black black = (Black) colorFactory.getColor("Black"); White white = (White) colorFactory.getColor("White"); System.out.println("This "+man.Is()+" is "+yellow.SurfaceIs()+" one."); System.out.println("This "+woman.Is()+" is "+yellow.SurfaceIs()+" one."); System.out.println("This "+man.Is()+" is "+black.SurfaceIs()+" one."); System.out.println("This "+woman.Is()+" is "+black.SurfaceIs()+" one."); System.out.println("This "+man.Is()+" is "+white.SurfaceIs()+" one."); System.out.println("This "+woman.Is()+" is "+white.SurfaceIs()+" one."); } }
结果如下:
This 男人 is Yellow one.
This 女人 is Yellow one.
This 男人 is Black one.
This 女人 is Black one.
This 男人 is White one.
This 女人 is White one.