zoukankan      html  css  js  c++  java
  • 设计者模式详解--工厂方法模式

    1. 概述:
      定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。

    2. 模式中的角色

      2.1 抽象工厂(Creator):这个抽象类(或接口)声明一个创建对象的工厂方法,用来返回一个Product类型的对象。

      2.2 具体工厂(ConcreteCreator):重定义工厂方法,返回一个具体的Concrete Product实例。

      2.3 抽象产品(Product):定义工厂方法所创建的对象。

      2.4 具体产品(ConcreteProduct): 具体产品,继承自Product抽象类。

    3. 模式解读

      3.1 工厂方法模式的一般化类图

      

      3.2 工厂方法模式的代码实现

     步骤1: 创建抽象工厂类,定义具体工厂的公共接口

    package com.hongmoshui.designMode.factory1;
    
    public abstract class Factory
    {
        public abstract Product Manufacture();
    }

     步骤2: 创建抽象产品类 ,定义具体产品的公共接口

    package com.hongmoshui.designMode.factory1;
    
    abstract class Product
    {
        public abstract void Show();
    }

     步骤3: 创建具体产品类(继承抽象产品类), 定义生产的具体产品

    package com.hongmoshui.designMode.factory1;
    
    //具体产品A类
    class ProductA extends Product
    {
        @Override
        public void Show()
        {
            System.out.println("生产出了产品A");
        }
    }
    
    // 具体产品B类
    class ProductB extends Product
    {
    
        @Override
        public void Show()
        {
            System.out.println("生产出了产品B");
        }
    }

     步骤4:创建具体工厂类(继承抽象工厂类),定义创建对应具体产品实例的方法

    package com.hongmoshui.designMode.factory1;
    
    //工厂A类 - 生产A类产品
    class FactoryA extends Factory
    {
        @Override
        public Product Manufacture()
        {
            return new ProductA();
        }
    }
    
    // 工厂B类 - 生产B类产品
    class FactoryB extends Factory
    {
        @Override
        public Product Manufacture()
        {
            return new ProductB();
        }
    }

     步骤5:外界通过调用具体工厂类的方法,从而创建不同具体产品类的实例

    package com.hongmoshui.designMode.factory1;
    
    //生产工作流程
    public class FactoryPattern
    {
        public static void main(String[] args)
        {
            // 客户要产品A
            FactoryA mFactoryA = new FactoryA();
            mFactoryA.Manufacture().Show();
    
            // 客户要产品B
            FactoryB mFactoryB = new FactoryB();
            mFactoryB.Manufacture().Show();
        }
    }

    4. 模式总结

      4.1 优点:

        工厂方法去除了条件分支(解除了工厂类与分支的耦合),解决了简单工厂对修改开放的问题。
      4.2 缺点:
        工厂方法模式实现时,客户端需要决定实例化哪个工厂来实现对具体产品的构建,选择判断依然存在,也就是说,工厂方法模式将简单工厂的逻辑判断交给客户端去处理。

        对简单工厂模式来说,增加功能是要修改工厂类的;但对工厂方法模式,修改的是客户端。
      4.3 使用场景:
        对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。
        子类的数量不固定,随时可能有新的功能子类出现

    原文链接:https://www.cnblogs.com/wangjq/archive/2012/07/02/2558696.html

     

  • 相关阅读:
    02 : python 基础语法,流程控制语句
    10 : mysql 主从复制
    docker Dockerfile 参数讲解
    docker service 创建swarm节点服务
    docker image 删除未使用的镜像
    docker config 创建配置文件
    docker wait 命令使用
    docker update 更新容器信息
    docker top 命令使用
    docker tag 修改镜像的标枪
  • 原文地址:https://www.cnblogs.com/hongmoshui/p/10438063.html
Copyright © 2011-2022 走看看