Java设计模式从精通到入门四 简单工厂方法模式

简单工厂方法模式

属于23中设计模式中创建型类型。

核心思想:工厂提供创建对象的接口,由子类决定实例化哪一个子类。

来源

? 设计模式之禅中的例子,女娲造人,通过八卦炉来进行造人,没有烧熟的为白人,烧太熟的为黑人,刚好的为黄种人的例子进行程序展示
女娲作为client,八卦炉为工厂类,人类为具体实现类,有皮肤的区别。

UML类图


图一
Factory: 工厂类的接口,根据类类型,提供只能创建Human子类,或者子孙类的方法。
HumanFactory: 工厂类的具体实现,通过反射获取该对象。
Human: 提供获取人类皮肤的接口。
WhiteHuman: Human的具体实现类
BlackHuman: Human的具体实现类
YellowHuman: Human的具体实现类

核心代码

Factory类:

public interface Factory {
    /**
     * @Author ouyangkang
     * @Description 提供返回人类比较具体的实例
     * @Date 10:04 2019/1/11
     * @param c
     * @return T
    **/
    <T extends Human> T getInstance(Class< ? extends Human> c);
}

HumanFactory类:

public class HumanFactory implements Factory {

    /**
     * @Author ouyangkang
     * @Description 实现
     * @Date 10:05 2019/1/11
     * @param c
     * @return T
    **/
    @Override
    public <T extends Human> T getInstance(Class<? extends Human> c) {
        if (c != null){
            try {
                return (T) c.newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

Human类:

public interface Human {
    /**
     * @Author ouyangkang
     * @Description 获取人类皮肤颜色
     * @Date 10:05 2019/1/11
     * @param
     * @return void
    **/
    void getColor();
}

WhiteHuman类:

public class WhiteHuman implements Human {
    @Override
    public void getColor() {
        System.out.println("白色人种");
    }
}

BlackHuman类:

public class BlackHuman implements Human {

    @Override
    public void getColor() {
        System.out.println("黑色人种");
    }
}

YellowHuman类

public class YellowHuman implements Human {
    @Override
    public void getColor() {
        System.out.println("黄色人种");
    }
}

Client类

public class Client {
    public static void main(String[] args) {
        Factory factory = new HumanFactory();
        Human instance = factory.getInstance(WhiteHuman.class);
        instance.getColor();
        factory.getInstance(BlackHuman.class).getColor();
        factory.getInstance(YellowHuman.class).getColor();
    }
}

输出结果:

白色人种
黑色人种
黄色人种

总结

? 简单工厂方法是一个非常常见的设计模式。Spring中有他的影子。它属于创建型模式,工厂父类提供创建产品对象的接口,具体的工厂类实现该接口,并创建相应的对象。这样做的目的是将产品类的实例化操作延迟到工厂子类中完成。

原文地址:https://www.cnblogs.com/Krloypower/p/10268302.html

时间: 2024-10-20 15:00:20

Java设计模式从精通到入门四 简单工厂方法模式的相关文章

设计模式学习总结:(7)工厂方法模式和抽象工厂模式

工厂方法模式应该算是很容易理解的模式,至少从书上看是这样一回事,但是真正深入去理解它一种存在意义却是不容易的(代码量不够-.-).从语法上看,无非就是把面向对象的多态特性封装到了内部工程类,实现运行时多态. 意图: 定义一个用于创建对象的接口,让子类决定实例化哪个类.Factory Method使一个类的实例化延迟到其子类. 结构图: 简单的代码: class AbProduct { public: virtual void sayName()=0; AbProduct(string name)

设计模式那点事读书笔记(1)----工厂方法模式

工厂方法模式: 定义一个创建产品对象的工厂接口,让子类决定实例化哪种实例对象,将实际创建实例对象的工作推迟到子类当中,核心工厂类不再负责具体产品创建. 解决什么问题: 当子类型可能会有很多,以后需要不断添加不同子类的实现. 当一个系统尚在框架设计阶段,还不知道将来需要实例化那些具体类时. 系统设计之初不需要具体对象的概念. UML: 代码结构: 代码: 定义抽象产品: package com.demo.factory.model; /** * 定义抽象商品 */ public abstract

从王者荣耀看设计模式(十四.工厂方法模式)

从王者荣耀看设计模式(工厂方法模式) 二.简介 王者荣耀游戏设计师根据英雄技能.属性.天赋等因素,将英雄划分为射手.辅助.打野.法师.坦克.战士等职业.一局比赛存在多类英雄可供选择.玩家在挑选游戏英雄时,合理的英雄职业搭配是赢得游戏胜利的基本保证. 三.工厂方法模式 工厂方法模式(Factory Method Pattern):工厂方法模式又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式.在

Java 设计模式(四)-工厂方法模式 (FactoryMethod Pattern)

1     概念定义 1.1   定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 1.2   类型 创建类模式 2     原理特征 2.1   类图 2.2   优点 1)封装性良好,代码结构清晰 2)可拓展性高,只需修改一下工厂方法或拓展一个工厂类 3)屏蔽产品类,调用者不需要关心产品类的变化 4)高度解耦,高层模块只需知道产品抽象类,无需关注实现 2.3   缺点 代码复杂度增加 3     .应用拓展 3.1   应用场景 1)    

Java设计模式之工厂方法模式(转) 实现是抽象工厂?

Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织   2009-02-25   来源:IT168网站 文本Tag: 设计模式 Java [IT168 技术文章]          一 .工厂方法(Factory Method)模式 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色

java/android 设计模式学习笔记(3)---工厂方法模式

这篇来介绍一下工厂方法模式(Factory Method Pattern),在实际开发过程中我们都习惯于直接使用 new 关键字用来创建一个对象,可是有时候对象的创造需要一系列的步骤:你可能需要计算或取得对象的初始设置:选择生成哪个子对象实例:或在生成你需要的对象之前必须先生成一些辅助功能的对象,这个时候就需要了解该对象创建的细节,也就是说使用的地方与该对象的实现耦合在了一起,不利于扩展,为了解决这个问题就需要用到我们的工厂方法模式,它适合那些创建复杂的对象的场景,工厂方法模式也是一个使用频率很

设计模式学习第四天:2.3工厂方法模式以及演化

一. 工厂方法(Factory Method)模式      工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中.      工厂方法模式是简单工厂模式的进一步抽象和推广.由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点.      在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做.这个核心类仅仅负责给出具体工厂必须实现的接口,而不接触哪一个产品类被实例化这种细

iOS常用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂方法包含:父类拥有共同基础接口,具体子类实现子类特殊功能,工厂类根据参数区分创建不同子类实例.该场景对应的UML图如下所示: 代码结构如下 Animal 类 @interface Animal :NSObject @proterty(nonatomic,strong) NSString *name; -(void)laugh; @end Dog类 @interface Dog:Animal @end Cat类 @i

【创建型设计模式】-简单工厂方法设计模式

单词:Creator [kri?et?] 创造者,创作者;  Product [?prɑd?kt]  产品; 结果; 乘积; 作品; factory [?f?kt?ri] 工厂,制造厂; <古>代理店; 简单工厂方法设计模式的设计图纸 Creator 是一个工厂类, 根据"四人帮"的软件设计模式的记号,图中的右半部分的类叫做产品类,由接口 Product 与 具体的实现类产品类ConcreteProduct 组成. 产品类实际上代表被创建的类结构,而Creator 类 是简