zoukankan      html  css  js  c++  java
  • 设计模式-工厂模式

    能够实现轻松方便地构造对象实例,而不必关心构造对象实例的细节和复杂过程呢

    工厂模式分为两类:工厂方法模式(包括简单工厂模式)与抽象工厂模式

    工厂方法模式:
    一个抽象产品类,可以派生出多个具体产品类。   
    一个抽象工厂类,可以派生出多个具体工厂类。   
    每个具体工厂类只能创建一个具体产品类的实例。


    抽象工厂模式:
    多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。   
    一个抽象工厂类,可以派生出多个具体工厂类。   
    每个具体工厂类可以创建多个具体产品类的实例。  

    简单工厂模式

    // 产品类
    public interface IProduct {
        void show();
    }
    
    //产品实现类
    public class ProductA implements IProduct {
        @Override
        public void show() {
        }
    }
    
    //简单工厂类
    public class SimpleFactory {
    
        public IProduct createProduct(ProductType type) {
            switch (type) {
            case A:
                return new ProductA();
            }
            return null;
        }
    }
    
    //类型枚举
    public enum ProductType {
        A, B, C
    }

    缺点:

    每增加一种实现,都要修改createProduct方法,增加新的分支

    工厂方法模式

    // 工厂方法抽象
    public interface IFactory {
        IProduct createProduct();
    }
    
    // 具体工厂实现
    public class FactoryA implements IFactory {
        @Override
        public IProduct createProduct() {
            return new ProductA();
        }
    }

    缺点:

    如果实现很多,会产生很多工厂对象

    抽象工厂模式

    // 另一种产品
    public interface IComponent {
    
    }
    
    public class ComponentA implements IComponent {
    
    }
    
    
    // 抽象工厂
    public interface AbstractFactory {
        IComponent createComponent();  
        
        IProduct createProduct(); 
    }
    
    // 工厂实现
    public class FactoryA implements AbstractFactory {
        public IComponent createComponent() {
            return new ComponentA();
        }
    
        public IProduct createProduct() {
            return new ProductA();
        }
    }

    抽象工厂与工厂方法的区别:

    一个工厂可以生产多种产品,产品属于统一族群

    应用场景

    1. 不需要区考虑具体的初始化过程

    2. 易于产品扩展,新增实现不影响已有代码 

  • 相关阅读:
    vue之路由的命名视图实现经典布局
    vue之路由的嵌套 子路由
    AngularJS阻止事件冒泡$event.stopPropagation()
    Vue之路由规则中定义参数 传参方式2 params
    前台页面中的Cookie存取删除,以及Cookie的跨域问题
    关于Cookie中的Expire问题和删除Cookie那点事儿
    4-索引中的那些操作
    3-在字符串内插中的神奇用法
    2-for循环之特别的写法与神奇的Override
    1-在C#中的数字 int double
  • 原文地址:https://www.cnblogs.com/alex09/p/6670671.html
Copyright © 2011-2022 走看看