1.1 界说

 简朴工厂模式属于建立型模式,又称为静态工厂方式模式,在简朴工厂模式中,可以凭据参数的差别,来返回差别类的实例,简朴工厂模式专门界说一个类来卖力建立子类的实例,被建立的类通常有一个配合的父类

1.2 简朴工厂模式结构图(简版)

                             

 Factory:工厂类,简朴工厂模式的焦点,它卖力实现建立所有实例的内部逻辑。工厂类的建立产物类的方式可以被外界直接挪用,建立所需的产物工具

 IProduct:抽象产物类,简朴工厂模式所建立的所有工具的父类,它卖力形貌所有实例所共有的公共接口

 Product:详细产物类,是简朴工厂模式的目的类

1.3 简朴工厂的实现一

 假设有一个电脑的代工生产商,它现在已经可以代工生产遐想电脑了,随着营业的拓展,这个代工生产商还要生产惠普和mac电脑;

 这样我们就需要用一个单独的类来专门生产电脑,这就用到了简朴工厂模式,同时用到了继续、封装、多态等面向工具编程的头脑,下面我们来实现简朴工厂模式

1.3.1 产物抽象类

public abstract class Computer {
    /**
     * 产物的抽象方式,由详细的产物类去实现
     */
    public abstract void start();

}

 

1.3.2  详细实现类

public class LenovoComputer extends Computer {

    @Override
    public void start() {
        System.out.println("lenovo computer run");
    }
}
public class MacComputer extends Computer {
    @Override
    public void start() {
        System.out.println("Mac computer run");
    }
}
public class HpComputer extends Computer {
    @Override
    public void start() {
        System.out.println("hp computer run");
    }
}

1.3.3  工厂类

public class ComputerFactory {
    public static Computer createComputer(String type) {
        Computer computer = null;
        switch (type) {
            case "lenovo":
                computer = new LenovoComputer();
                break;
            case "hp":
                computer = new HpComputer();
                break;
            case "Mac":
                computer = new MacComputer();
                break;
            default:
                break;
        }
        return computer;
    }
}

1.3.4  UML类图

                          

1.4 优瑕玷

 优点:

 1. 工厂类含有需要的判断逻辑,可以决定在什么时候建立哪一个产物类的实例,客户端可以免去直接建立产物工具的责任,而仅仅“消费”产物;实现了对责任的支解,它提供了专门的工厂类用于建立工具

 2. 客户端无须知道所建立的详细产物类的类名,只需要知道详细产物类所对应的参数即可,对于一些庞大的类名,通过简朴工厂模式可以削减使用者的记忆量。

 3. 通过引入配置文件,可以在不修改任何客户端代码的情况下替换和增添新的详细产物类,在一定程度上提高了系统的灵活性。

瑕玷:

 1. 由于工厂类集中了所有产物建立逻辑,一旦不能正常事情,整个系统都要受到影响。

 2. 使用简朴工厂模式将会增添系统中类的个数,在一定程序上增添了系统的庞大度和明白难度。

 3. 系统扩展难题,一旦添加新产物就不得不修改工厂逻辑,同样破坏了“开闭原则”;在产物类型较多时,有可能造成工厂逻辑过于庞大,不利于系统的扩展和维护

 4. 简朴工厂模式由于使用了静态工厂方式,造成工厂角色无法形成基于继续的品级结构

1.5 适用场景

 1. 工厂类卖力建立的工具比较少:由于建立的工具较少,不会造成工厂方式中的营业逻辑太过庞大。

 2. 客户端只知道传入工厂类的参数,对于若何建立工具不体贴:客户端既不需要体贴建立细节,甚至连类名都不需要记着,只需要知道类型所对应的参数

1.6 模式应用

 1. JDK类库中普遍使用了简朴工厂模式,如工具类java.text.DateFormat,它用于格式化一个内陆日期或者时间

public final static DateFormat getDateInstance(); 
public final static DateFormat getDateInstance(int style); 
public final static DateFormat getDateInstance(int style,Locale locale);

 2. 获取差别加密算法的密钥生成器

KeyGenerator keyGen=KeyGenerator.getInstance("DESede");

1.7 开闭原则

 对于上面两种简朴工厂模式的实现方式,若是我们要添加新的 parser,那势需要改动到 RuleConfigParserFactory 的代码,那这是不是违反开闭原则呢?

 实际上,若是不是需要频仍地添加新的 parser,只是偶然修改一下 RuleConfigParserFactory 代码,稍微不符合开闭原则,也是完全可以接受的

 只管简朴工厂模式的代码实现中,有多处 if 分支判断逻辑,违反开闭原则,但权衡扩展性和可读性,这样的代码实现在大多数情况下(好比,不需要频仍地添加 parser,也没有太多的 parser)是没有问题

 

,

环球UG

欢迎进入环球UG官网(UG环球):www.ugbet.us,环球UG官方网站:www.ugbet.net开放环球UG网址访问、环球UG会员注册、环球UG代理申请、环球UG电脑客户端、环球UG手机版下载等业务。

Allbet Gaming声明:该文看法仅代表作者自己,与阳光在线无关。转载请注明:环球ug代理:设计模式系列之一:简朴工厂模式
发布评论

分享到:

著名商标:Glide源码解析一,初始化
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。