您的位置:首页 > 房产 > 建筑 > 静态工厂模式(简单工厂模式)与动态工厂模式(工厂方法模式)

静态工厂模式(简单工厂模式)与动态工厂模式(工厂方法模式)

2024/10/7 2:26:06 来源:https://blog.csdn.net/weixin_71894495/article/details/141756161  浏览:    关键词:静态工厂模式(简单工厂模式)与动态工厂模式(工厂方法模式)

1. 简单工厂模式

核心是定义一个创建对象的接口,将对象的创建和本身的业务逻辑分离,降低系统的耦合度,使得两个修改起来相对容易些,当以后实现改变时,只需要修改工厂类即可。该模式对对象创建管理方式最为简单,因为其仅仅简单的对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类型来指定要创建的对象,其UML类图如下:

AbstractProduct

/** 产品接口 **/
public interface AbstractProduct {void doSomething();
}

Product1

public class ProductA implements AbstractProduct {@Overridepublic void doSomething() {System.out.println("i am productA");}
}

Product2 

public class ProductB implements AbstractProduct {@Overridepublic void doSomething() {System.out.println("i am productB");}
}

Factory 

/** 简单工厂 **/
public class SimpleFactory {public static AbstractProduct createProduct(String productName){AbstractProduct instance = null;switch (productName){case "A":instance = new ProductA();break;case "B":instance = new ProductB();break;}return instance;}
}

测试 

public class SimpleFactoryTest {public static void main(String[] args) {AbstractProduct productA = SimpleFactory.createProduct("A");productA.doSomething();AbstractProduct productB = SimpleFactory.createProduct("B");productB.doSomething();}
}

2. 工厂方法模式 

        和简单工厂模式中工厂负责生产所有产品相比,工厂方法模式将生成具体产品的任务分发给具体的产品工厂,其UML类图如下:

AbstractProduct 

/** 产品接口 **/
public interface AbstractProduct {void doSomething();
}

Product1

/**  具体产品实现 **/
public class ProductA implements AbstractProduct {@Overridepublic void doSomething() {System.out.println("i am productA");}
}

Product2 

/**  具体产品实现 **/
public class ProductB implements AbstractProduct {@Overridepublic void doSomething() {System.out.println("i am productB");}
}

ConcreateFactory1 

/**  具体工厂实现 **/
public class FactoryA implements AbstractFactory {@Overridepublic AbstractProduct createProduct() {return new ProductA();}
}

ConcreateFactory2 

/**  具体工厂实现 **/
public class FactoryB implements AbstractFactory{@Overridepublic AbstractProduct createProduct() {return new ProductB();}
}

AbstractFactory 

/**  工厂接口 **/
public interface AbstractFactory {public AbstractProduct createProduct();
}

测试 

public class AbstractFactoryTest {public static void main(String[] args) {AbstractFactory factoryA = new FactoryA();AbstractProduct abstractProductA = factoryA.createProduct();abstractProductA.doSomething();AbstractFactory factoryB = new FactoryB();AbstractProduct abstractProductB = factoryB.createProduct();abstractProductB.doSomething();}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com