zoukankan      html  css  js  c++  java
  • 设计模式(3)--SimpleFactory( [1] 简单工厂模式)--创建型

    1.模式定义:

      简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

    2.模式特点:

      实现方式的实质:由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例;

    3.使用场景:

      将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦;即使用者可直接消费产品而不需要知道其生产的细节;
      (1) 工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂
      (2) 客户端只知道传入工厂类的参数,对于如何创建对象并不关心
      (3) 鉴于该模式的缺点,因此一般只在很简单的情况下应用该模式

    4.模式实现:

       1) 工厂类角色(SimpleFactory):

      这是本模式的核心,含有一定的商业逻辑和判断逻辑,用来创建产品
    public class Factory {  
    //静态工厂方法
        public static  BMW createBMW(int type) {  
            switch (type) {  
           case 320:  
                return new BMW320();  
            case 523:  
                return new BMW523();    
            default:  
                break;  
            }  
            return null;  
        }  
    }  

             2) 抽象产品角色(Product):

      它一般是具体产品继承的父类或者实现的接口。
    abstract class BMW {  
        public BMW(){  }  
    }  

             3) 具体产品角色(ConcreateProductA,ConcreateProductB):

      工厂类所创建的对象就是此角色的实例。在Java中由一个具体类实现。 
    public class BMW320 extends BMW {  
        public BMW320() {  
            System.out.println("制造-->BMW320");  
        }  
    }  
    public class BMW523 extends BMW{  
        public BMW523(){  
            System.out.println("制造-->BMW523");  
        }  
    }

         4) 客户端使用:

    public class Customer {  
        public static void main(String[] args) {  
            Factory factory = new Factory();  
            BMW bmw320 = factory.createBMW(320);  
            BMW bmw523 = factory.createBMW(523);  
        }  
    } 

    5.优缺点:

    (1)简单工厂模式的优点

       模式的核心是工厂类。这个类含有必要的逻辑判断,可以决定在什么时候创建哪一个登录验证类的实例,而调用者则可以免除直接创建对象的责任。简单工厂模式通过这种做法实现了对责任的分割,当系统引入新的登录方式的时候无需修改调用者。更符合面向对象的原则 & 面向接口编程;

    (2)简单工厂模式的缺点

       这个工厂类集中了所以的创建逻辑,当有复杂的多层次等级结构时,所有的业务逻辑都在这个工厂类中实现。什么时候它不能工作了,整个系统都会受到影响。
       违背“开放 - 关闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂,对于系统维护和扩展不够友好;
       简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构;
  • 相关阅读:
    hudson搭建经验总结(二)
    CodePen最佳实例分享
    hudson搭建经验总结
    资料文件夹管理系统
    ueditor+word图片上传
    asp.net上传大文件
    UEditor粘贴word
    大文件上传组件
    文件资源管理系统
    ueditor+复制word图片粘贴上传
  • 原文地址:https://www.cnblogs.com/yysbolg/p/7404157.html
Copyright © 2011-2022 走看看