工厂方法模式
工厂模式角色:
- 抽象工厂角色
- 具体工程角色
- 抽象产品角色
- 具体产品角色
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,扩展型强,但是如果需要修改多个产品类,工作量较大 |