设计模式之工厂模式

一、定义

工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。

应用实例: 1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 2、Hibernate 换数据库只需换方言和驱动就可以。

二、优缺点

优点:

  • 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
  • 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;


缺点:

  • 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

三、代码实现举例

(1)创建一个接口

public interface Product {
    public void show();
}

(2)创建实现接口的实体类

public class CreateProduct1 implements Product {
    @Override
    public void show() {
        System.out.println("CreateProduct1 show!!!");
    }
}

public class CreateProduct2 implements Product{
    @Override
    public void show() {
        System.out.println("CreateProduct2 show!!!");
    }
}

(3)创建一个工厂,生成基于给定信息的实体类的对象

public class ProductFactory {

    public Product getProduct(String productType){
        if (null == productType || productType.length() < 1){
            return null;
        }
        if (productType.equalsIgnoreCase("PRODUCT1")){
            return new CreateProduct1();
        } else if (productType.equalsIgnoreCase("PRODUCT2")){
            return new CreateProduct2();
        }
        return null;
    }

}

(4)使用该工厂,通过传递类型信息来获取实体类的对象

public class FactoryPatternDemo {
    public static void main(String[] args) {
        ProductFactory  factory = new ProductFactory();
        Product p1 = factory.getProduct("PRODUCT1");
        Product p2 = factory.getProduct("PRODUCT2");
        p1.show();
        System.out.println("--------------------");
        p2.show();
    }
}

结果:

CreateProduct1 show!!!
--------------------
CreateProduct2 show!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值