工厂方法模式
工厂模式角色:
- 抽象工厂角色
- 具体工程角色
- 抽象产品角色
- 具体产品角色
OCP模式: 开闭模式—扩展不需要修改已有代码
简单工厂模式
/**
*
* 如果增加产品C,则需要修改静态工厂类 增加生产新产品C的方法
*
*/
package Abstract.factory;
interface Product
{
void doSome();
}
class ProductA implements Product
{
public void doSome()
{
System.out.println("产品A");
}
}
class ProductB implements Product
{
public void doSome()
{
System.out.println("产品B");
}
}
class ProductFactory
{
public static Product getProductA() {
return new ProductA();
}
public static Product getProductB() {
return new ProductB();
}
}
public class staticFactory {
private static Product p1 ;
private static Product p2 ;
public static void main(String[] args) {
p1 = ProductFactory.getProductA();
p2 = ProductFactory.getProductB();
p1.doSome();
p2.doSome();
}
}
工厂方法模式
/**
*
* 如果增加P3 则直接再加一个InProductFactory的实现: P3工厂 满足 OCP模式
*/
package Abstract.factory;
interface InProductFactory
{
Product getProduct();
}
class InProductAFactory implements InProductFactory
{
@Override
public Product getProduct() {
return new ProductA();
}
}
class InProductBFactory implements InProductFactory
{
@Override
public Product getProduct() {
return new ProductB();
}
}
public class factory {
private static Product p1 ;
private static Product p2 ;
public static void main(String[] args) {
p1 = new InProductAFactory().getProduct();
p2 = new InProductBFactory().getProduct();
p1.doSome();
p2.doSome();
}
}
对比:
| 简单工厂模式 | 工厂方法模式 | |
|---|---|---|
| 1.结构复杂程度 | 只需要一个工厂类,违反开闭原则 | 随着产品增多,工厂类繁多 |
| 1.代码复杂程度 | 随着产品增多,仅有的一个工厂类的会非常复杂 | 每个工厂复杂程度简单 |
| 1.客户端编程度 | 工厂静态的,无需实例化 | 每个工厂都需要实例化 |
| 1.管理上的难度 | 修改多个产品类,工作量小 | 完全满足OCP,扩展型强,但是如果需要修改多个产品类,工作量较大 |

本文深入探讨了工厂模式,包括简单工厂模式和工厂方法模式的结构、优缺点及应用场景。通过对比,帮助读者理解如何选择合适的设计模式来提高代码的扩展性和维护性。
331

被折叠的 条评论
为什么被折叠?



