设计模式之Factory Method模式

作用:将实例的生成交给子类

用Template Method模式来构建生成实例的工厂,这就是Factory Method模式。

在Factory Method中,父类决定实例的生成方式,但并不决定所要生成的具体的类,具体的处理全部交给子类去负责

UML类图:

Product类:

public abstract class Product
{
    public abstract void use();
}

use方法的实现交给Product的子类

Factory类:

public abstract class Factory
{
    public final Product create(String owner) //创建产品并注册
    {
        Product p = createProduct(owner); //创建产品
        registerProduct(p);  //注册 

        return p;
    }

    protected abstract Product createProduct(String owner);
    protected abstract void registerProduct(Product product);
}

IDCard类:

public class IDCard extends Product
{
    private String owner;

    IDCard(String owner)
    {
        this.owner = owner;
    }

    public void use()
    {
        System.out.println("use it.");
    }

    public String getOwner()
    {
        return owner;
    }
}

IDCardFactory类:

public class IDCardFactory extends Factory
{
    private List owners = new ArrayList();

    protected Product createProduct(String owner)
    {
        return new IDCard(owner);
    }

    protected void registerProduct(Product product)
    {
        owner.add(((IDCard)product).getOwner());
    }

    public List getOwners()
    {
        return owners;
    }
}

Main类:

public class Main
{
    public static void main(String[] argvs)
    {
        Factory factory = new IDCardFactory();

        Product card1 = factory.create("XXX");
        card1.use();
    }
}

步骤:首先创建对应实例的工厂,然后通过实例的工厂去创建对应实例,此中实例的构造函数是包内,并非public

原文地址:https://www.cnblogs.com/cdp1591652208/p/10792514.html

时间: 2024-08-02 06:22:05

设计模式之Factory Method模式的相关文章

设计模式:factory method模式

核心:将实例的生成交给子类,父类中只定义生成实例的接口 理解:对比模板方法模式的思维非常类似,模板方法模式中的模板方法理解成创造对象的抽象方法,不再是流程框架,就变成工厂方法模式,只是具体的方法是创建对象 优势:隐藏具体类的实现细节 例子: class Apple { public: void show() { cout << "Success" << endl; } }; template<typename T> class Factory { p

设计模式初学者笔记:Factory Method模式

如果要选择一种最多人熟悉的Factory Method模式的具体应用,那么就应该是MFC的App/Doc架构了.Factory Method主要在类框架中使用,以解决以下问题:框架必须实例化类,但框架只知道不能被实例化的抽象类.嗯,这么说有点抽象,我们上图: 上面的图中,基类Application有一个成员函数NewDocument用于创建并打开新文档(你可以将这个函数想象为对File->New菜单的响应).该函数完成以下工作: 1. 创建新文档 2. 将该文档加入App以便于管理(比如挂到打开

图解设计模式-factory Method模式

用Template Method模式构建生成实例的工厂. 在factory method模式中,父类决定实例的生成方式,但是不决定所要生成的具体类,具体的处理交给子类负责. 角色: Product产品:它定义了在Factory Method模式中的生成的那些实例所持有的接口,由Product类扮演. Creator创建者:负责生成Product角色的抽象类,由Factory类扮演. ConcreteProduct具体产品:决定具体的产品,由IDCard类扮演. ConcreteCreator具体

GOF设计模式——Factory Method模式

一.什么是Factory Method模式 Factory Method模式是用来构建生成实例的工厂,在该模式下,父类决定实例生成的方式,但并不决定所要生成的具体类.这样的设计思想,就跟Template Method模式相似(具体参考:https://www.cnblogs.com/SysoCjs/p/10327088.html或者https://blog.csdn.net/weixin_39400271/article/details/86565016),因为Factory Method模式就

设计模式学习--Factory Method

What Factory Method:定义一个创建对象的接口,让子类来决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. Why Factory Method是一个比较基础的创建型模式,它主要在于由子类决定实例化哪一个类.主要用于框架代码或者工具包中. 适用于如下场景: 1.当一个类不知道它所必须创建的对象的类的时候 2.当一个类希望由子类来指定它所创建对象的时候 3.当类将创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的

Factory Method模式

第四章: 工厂模式 工厂模式所包含的角色: 1.Product(产品) 2.Creator(创建者) 3.ConcreateProduct(具体的产品) 4.ConcreateCreator(具体的创建者) 实现流程: 定义抽象产品(Product),在抽象产品(Product)中可以定义需要实现的抽象方法,工厂模式在使用中一般都是以多态形式使用,如: Factory f = new XXXFactory("XXX"); f.xxx(); 其中f.xxx():就是你在产品(Produc

一天一个设计模式——模板方法(Template Method)模式

一.模式说明 现实世界中的模板是用于将事物的结构规律予以固定化.标准化的成果,它体现了结构形式的标准化.例如镂空文字印刷的模板,通过某个模板印刷出来的文字字体大小都是一模一样,但是具体使用什么材质的颜料,什么颜色的颜料来印刷文字,取决于具体实际业务场景的需要.由此可见,模板制定了某些固定的条条框框,以及事物的处理标准流程,但是并没有说明如何去做,具体如何做,取决于使用模板的人. 在程序设计领域,模板是具有一系列抽象方法的接口类,单看接口类,我们只能知道这个模板有哪些抽象方法以及这些方法的调用顺序

Android与设计模式——模板方法(Template Method)模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 模板方法模式的结构 模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术. 模板方法模式需要开发抽象类和具体子类的设计师之间的协作

设计模式之Factory工厂模式

在上一章,模板模式中,我们在父类规定处理的流程,在子类中实现具体的处理.如果我们将该模式用于生成实例,便演变成了Factory模式,即工厂模式. 在Factory模式中,父类决定实例的生成方式,但并不决定所要生成的具体的类,具体处理全部交给子类进行. 设计实例则是模仿Spring框架进行的操作,模拟制作身份证.为了模拟Spring框架解耦,我们采用分包的方法,即生成实例的框架放在framework包中,而加工处理,具体实现的类放在具体实现的idcard包中. framework包中的produc