软件设计--抽象工厂模式
就我的理解来说,抽象工厂模式就是,创建接口和抽象类,把分类逐渐总到一起~
使用抽象工厂模式,完成上述产品等级结构:
先对性别进行分类:
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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?