设计模式-简单工厂

Posted jiangtao1218

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-简单工厂相关的知识,希望对你有一定的参考价值。

  1. 什么是工厂:万物皆对象,万物皆产品;工厂生成(new)产品;工程生成基类产品;
  2. 用户不关心产品生产过程,产品详细的生产过程放在工厂方法里
  3. 为什么使用工厂方法:在用户类代码中,使用new关键字实例化产品类时,就会导致用户类与产品类强耦合。
  4. 使用建议
    1. 工厂方法静态化: 简单工厂类中创建实例的方法,应为静态方法。
    2. 实例创建配置文件化:实例创建应尽量通过配置文件及反射机制,动态创建,达到能根据某个值,自动判断并创建对应类的实例的目的,这样就可以将庞大的swith语句块消除,同时,实例化部分的修改,只需要修改配置文件即可。
  5. 简单工厂模块化:一个简单工厂可以定义多个创建实例的静态方法,建议按照不同的功能模块,创建不同的工厂类。因为简单工厂类是一个模块封装提的一部分。
  6. 优点
    1. 能够非常简单快捷的实现模块的组件化,组件通过对外公开接口,实现面向接口编程
    2. 实现了外部调用和具体实现的解耦,增强了系统的健壮性和易维护性。
  7. 缺点
    1. 违背开放封闭原则(对新增是开的对修改是封闭的)  
  8. 类图

 

技术分享图片

public interface Product {
    public void viewColor();
    public void viewName();
}

 

public class ConcreteProduct_A implements Product {

    @Override
    public void viewColor() {
        System.out.println("view ConcreateProduct_A color");

    }

    @Override
    public void viewName() {
        System.out.println("view ConcreateProduct_A name");

    }

}
public class ConcreteProduct_B implements Product {

    @Override
    public void viewColor() {
        System.out.println("view ConcreateProduct_B color");

    }

    @Override
    public void viewName() {
        System.out.println("view ConcreateProduct_B name");

    }
}
public class ProductFactory {
    public static Product CreateInstance(String type){
        Product result=null;
        switch (type)
        {
            case "A":
                result  =new ConcreteProduct_A();
                break;
            case "B":
                result = new ConcreteProduct_B();
                break;
            
        }
        return result;
    }
}

 

以上是关于设计模式-简单工厂的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式-简单工厂工厂方法模式抽象工厂模式详解

Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---工厂模式之简单工厂

设计模式之简单工厂模式

C#之三十八 简单工厂设计模式