FACTORY METHOD(工厂方法)-- 对象创建型模式

  1. 意图:
    定义一个用于创建对象的接口,让子类决定示例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

  2. 别名:
    虚拟构造器(Virtual Constructor)

  3. 动机:
    框架使用抽象类定义和维护对象之间的关系。这些对象的创建通常也用框架负责。

  4. 适用性:
    a. 当一个类不知道它所必须创建的对象的类的时候。
    b. 当一个类希望由它的子类来指定它所创建的对象的时候。
    c. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个子类是代理这一信息局部化的时候。

  5. 结构:
    工厂方法结构图

  6. 参与者:
    a. Product: 定义工厂方法所创建的对象接口
    b. ConcreteProduct: 实现Product接口
    c. Creator:
    声明工厂方法,该方法返回一个Product类型对象。
    Creator也可以定义一个工厂方法的缺省实现它返回一个缺省的ConcreteProduct对象。
    可以调用工厂方法创建一个Product对象。
    d. ConcreteCreator:重新定义工厂方法以返回一个ConcreteProduct实例。

  7. 协作:
    Creator依赖于它的子类来定义工厂方法,所以它返回一个适当的ConcreteProduct实例。

  8. 效果:
    a. 为子类提供挂钩(hook)。
    b. 连接平行的类层次。

  9. 实现:
    a. 主要有两种不同的情况: 1.Creator类是一个抽象类并且不提供它声明的工厂方法实现。
    2.Creator是一个具体的类而且工厂方法提供一个缺省的实现。
    b. 参数化工厂方法
    c. 特定语言的变化和问题
    d. 使用模板以避免创建子类

  10. 代码示例:

    //产品接口
    public interface Product {
        public void describe();
    }
    
    //具体的产品
    public class ConcreteProduct implements  Product{
        @Override
        public void describe() {
            System.out.println("This is product");
        }
    }
    
    //创建器
    public interface Creator {
        public Product factoryMethod();
        public void anOperation();
    }
    
    //具体的创建器
    public class ConcreteCreator implements Creator {
        @Override
        public Product factoryMethod() {
            return new ConcreteProduct();
        }
    
        @Override
        public void anOperation() {
    
        }
    }
    
    //客户端调用
    public class Client {
        public static void main(String[] args) {
            Creator creator = new ConcreteCreator();
            Product product = creator.factoryMethod();
            product.describe();
        }
    }
    
  11. 已知应用:
    工厂方法主要用于工具包和框架中。

  12. 相关模式:
    Abstra Factory经常用工厂方法来实现。
    工厂方法通常在Template Methods中被调用。
    Prototypes不需要创建Creator的子类。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值