工厂模式
简单工厂
违反开闭原则。对于增加新的产品,需要扩展已有代码
public class SimpleFactoryTest { public static void main(String[] args) { IPhone phone = PhoneStaticFactory.createPhone("13"); if(phone != null){ phone.product(); } } } class PhoneStaticFactory{ private String type; public static IPhone createPhone(String type){ if(type.equals("8plus")){ return new Iphone8plus(); }else if(type.equals("13")){ return new Iphone13(); }else{ System.out.println("还未生产该型号手机,敬请期待"); return null; } } } interface IPhone{ public void product(); } class Iphone8plus implements IPhone{ @Override public void product() { System.out.println("生产手机型号为8plus"); } } class Iphone13 implements IPhone{ @Override public void product() { System.out.println("生产手机型号为13"); } }
工厂方法
扩展性强,产生多个工厂。支持增加任意产品
public class MethodFactoryTest { public static void main(String[] args) { IPhone iPhone = new Iphone13Factory().createPhone(); iPhone.product(); } } interface IPhone{ public void product(); } interface IPhoneFactory{ public IPhone createPhone(); } class Iphone8plus implements IPhone { @Override public void product() { System.out.println("生产手机型号为8plus"); } } class Iphone8plusFactory implements IPhoneFactory{ @Override public IPhone createPhone() { return new Iphone8plus(); } } class Iphone13 implements IPhone { @Override public void product() { System.out.println("生产手机型号为13"); } } class Iphone13Factory implements IPhoneFactory{ @Override public IPhone createPhone() { return new Iphone13(); } }
抽象工厂
创建一组相关或相互依赖对象的接口
public class AbstractFactoryTest { public static void main(String[] args) { AbstractFactory abstractFactory = new HuaWieAbstractFactory(); IPhone phone = abstractFactory.createPhone(); phone.product(); } } interface AbstractFactory{ public IPhone createPhone(); public IRouter createRouter(); } class XiaoMiAbstractFactory implements AbstractFactory{ @Override public IPhone createPhone() { return new XiaoMiIphone(); } @Override public IRouter createRouter() { return new XiaoMiRouter(); } } class HuaWieAbstractFactory implements AbstractFactory{ @Override public IPhone createPhone() { return new HUAWEIIphone(); } @Override public IRouter createRouter() { return new HuaWeiRouter(); } } interface IPhone{ public void product(); } class XiaoMiIphone implements IPhone { @Override public void product() { System.out.println("小米手机"); } } class HUAWEIIphone implements IPhone { @Override public void product() { System.out.println("华为手机"); } } interface IRouter{ public void product(); } class XiaoMiRouter implements IRouter{ @Override public void product() { System.out.println("小米路由器"); } } class HuaWeiRouter implements IRouter{ @Override public void product() { System.out.println("华为路由器"); } }