工厂设计模式在java中有大量的应用,如spring框架,这种类型的设计模式属于创建型模式。在工厂设计模式中,创建逻辑不会对客户端暴露,可以通过一个对外接口创建所需对象。
工厂模式使用场景需要频繁创建对象且这些对象多处使用,业务发生改变需要修改多处代码,使用工厂模式即可进行代码解耦,业务改变修改时只需修改工厂部分代码
简单工厂模式1.抽象一个对象,定义共性内容
public interface IMarket { void goods(); }
2.创建具体实现类,实现自己特有内容
public class JdMarket implements IMarket { @Override public void goods() { System.out.println("这是京东的商品"); } } public class PddMarket implements IMarket { @Override public void goods() { System.out.println("这是拼多多的商品"); } } public class TbMarket implements IMarket { @Override public void goods() { System.out.println("这是淘宝的商品"); } }
3.创建工厂,定义通过类型获取对应产品对象的方法
public class SimpleFactory { public static IMarket getMarket(String type) { switch (type) { case "JD": return new JdMarket(); case "TB": return new TbMarket(); case "PDD": return new PddMarket(); default: return null; } } }测试结果
public class SimpleFactoryTestMain { public static void main(String[] args) { // 此处传入京东,获取京东商场 IMarket market = SimpleFactory.getMarket("JD"); market.goods(); } }总结:
简单工厂就是将对象抽象,定义共性内容,创建具体实现类。然后创建一个工厂,通过传入不同类型,创建对应对象。在一定程度上解耦代码。未来产品发生变化时,一定程度上减少修改工作量。但是在新增对象时需要修改工厂内部逻辑,对象过多时增加了系统逻辑复杂度,不利于未来的扩展和维护。
工厂方法模式对简单工厂模式进一步抽象定义,使得可以在不修改工厂逻辑的情况下,可以拓展添加新的对象。
抽象工厂类,创建工厂接口,抽象定义获取对象的接口。
public interface IMarketFactory { IMarket getMarket(); }
定义具体工厂类,实现抽象工厂接口,实现获取对象的方法,由具体的工厂创建对应的对象
public class JdMarketFactory implements IMarketFactory { @Override public IMarket getMarket() { return new JdMarket(); } } public class PddMarketFactory implements IMarketFactory { @Override public IMarket getMarket() { return new PddMarket(); } } public class TbMarketFactory implements IMarketFactory { @Override public IMarket getMarket() { return new TbMarket(); } }测试结果
public class FactoryMethodTestMain { public static void main(String[] args) { // 获取京东商场对象 JdMarketFactory jdMarketFactory = new JdMarketFactory(); IMarket market = jdMarketFactory.getMarket(); market.goods(); // 获取淘宝商场对象 TbMarketFactory tbMarketFactory = new TbMarketFactory(); IMarket tbMarket = tbMarketFactory.getMarket(); tbMarket.goods(); } }总结
工厂方法模式的优点是具备更高的复用性和可读性,可以在不需要修改工厂逻辑的情况下可以创建新的对象。缺点是需要创建很多的工厂,当类型很多的时候,需要创建的工厂类就很多。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)