图解设计模式-factory Method模式

用Template Method模式构建生成实例的工厂。

在factory method模式中,父类决定实例的生成方式,但是不决定所要生成的具体类,具体的处理交给子类负责。

角色:

Product产品:它定义了在Factory Method模式中的生成的那些实例所持有的接口,由Product类扮演。

Creator创建者:负责生成Product角色的抽象类,由Factory类扮演。

ConcreteProduct具体产品:决定具体的产品,由IDCard类扮演。

ConcreteCreator具体创建者:负责生成具体的产品,有IDCardFactory类扮演此角色。

优点:

提供统一实例工厂的框架。

框架与具体实现分开:可以根据不同产品类、创建不同的产品工厂,例如下面代码是IDCard产品与IDCardFactory产品工厂,也可以创建其他的产品和产品工厂。

框架:Product产品抽象类、Factory工厂抽象类

具体实现:IDCard产品类、IDCardFactory产品工厂类

代码:

public abstract class Factory {

    public final Product create(String owner) {
        Product product = createProduct(owner);
        register(product);
        return product;
    }

    public abstract Product createProduct(String owner);
    public abstract void register(Product product);
}
public abstract class Product {

    public abstract void use();
}
public class IDCard extends Product {
    private String owner;

    public IDCard(String owner) {
        System.out.println("创建"+owner+"的ID卡");
        this.owner=owner;
    }
    @Override
    public void use() {
        System.out.println("使用"+owner+"的ID卡");
    }

    public String getOwner(){
        return owner;
    }
}
public class IDCardFactory extends Factory {
    List owners = new ArrayList<>();

    @Override
    public Product createProduct(String owner) {
        return new IDCard(owner);
    }

    @Override
    public void register(Product product) {
        owners.add(((IDCard)product).getOwner());
    }
}
public class Main {
    public static void main(String[] args){
        Factory factory = new IDCardFactory();
        Product product1= factory.create("s1");
        Product product2= factory.create("s2");
        Product product3= factory.create("s3");
        product1.use();
        product2.use();
        product3.use();
    }
}

执行结果:

创建s1的ID卡

创建s2的ID卡

创建s3的ID卡

使用s1的ID卡

使用s2的ID卡

使用s3的ID卡

代码说明:

Factory抽象类中的create方法定义了创建实例的流程,即调用方法的顺序,先调用createProduct创建产品,在调用register方法把创建的产品进行保存(保存在哪里由具体的工厂决定)。

Product抽象类中use方法定义了被工厂创建的实例中的使用方法,即use方法。(具体实例中方法不用,只起到测试作用,用于确认工厂确实可以创建实例并且调用到对应方法)

IDCardFactory类继承了Factory抽象类,定了createProduct和register方法的具体实现,把创建的实例保存到List集合中。

原文地址:https://www.cnblogs.com/use-D/p/9563120.html

时间: 2024-11-11 18:49:49

图解设计模式-factory Method模式的相关文章

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模式就

图解设计模式-Template Method模式

父类中定义处理流程,子类中实现具体处理的模式称为Template Method模式 优点: 可以保持逻辑处理通用化(父类中定义处理流程) 父类与子类之间协作(子类实现父类的抽象方法) 父类与子类保持一致性(子类继承父类) 延伸: 子类可以使用父类的方法 可以通过子类增加方法以实现新功能 子类重写父类的方法可以改变程序的行为 角色划分: AbstractClass抽象类:负责实现模块方法,还负责声明在模板方法中所使用到的抽象方法,这些抽象方法由子类负责实现. ConcreteClass具体类:实现

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

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

设计模式之Factory Method模式

作用:将实例的生成交给子类 用Template Method模式来构建生成实例的工厂,这就是Factory Method模式. 在Factory Method中,父类决定实例的生成方式,但并不决定所要生成的具体的类,具体的处理全部交给子类去负责 UML类图: Product类: public abstract class Product { public abstract void use(); } use方法的实现交给Product的子类 Factory类: public abstract c

设计模式 Template Method模式 显示程序猿的一天

转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/26276093 不断设计模式~ Template Method模式 老套路,看高清:它定义的算法的骨架.虽然某些步骤推迟到子类中.不改变算法结构的情况下.又一次定义算法的步骤. 简单看下定义,模版方法定义了一个算法的步骤,而且同意子类为一个或多个步骤提供实现. 定义还算清晰,以下来个样例展示下本公司的上班情况(纯属娱乐,如有雷同.请对号入座).简单描写叙述一下:本公司有程序员.測

【图解设计模式】Mediator模式

组员向仲裁者报告,仲裁者向组员下达指示.组员之间不再相互询问和相互指示. 示例 一个GUI应用程序,它展示了一个登录对话框,用户在其中输入正确的用户名和密码后可以登录. 可以选择作为游客访问(Guest)或是作为用户登录(Login) 作为用户登录时,需要输入正确的用户名(Username)和密码(Password) 点击OK按钮可以登录,点击Cancel按钮可以取消登录 类图 时序图 Mediator接口 1234 public interface { public abstract void

深入浅出设计模式 ------ Factory Method(工厂方法)

1. 定义: 一个用于创建对象的接口, 让子类决定实例化哪个类. 工厂方法使一个类的实例化延迟到子类. 2. 结构 3. 参与者(如上图) Product ---- 定义工厂方法所创建的对象接口 ConcreteProduct ---- 实现Product接口 Creator ---- 声明工厂方法, 该方法返回一个Product类型的对象 ConcreteCreator ---- 重新定义工厂方法返回一个ConcreteProduct实例 4. 实现 (1) 特例: 简单工厂(Simple F

图解设计模式之Adapter模式

什么是Adapter模式  Adapter模式即适配器模式,对于适配器的理解参考现实生活中把交流电转换成直流电的电源适配器,用于填补现有的程序和所需的程序之间差异的设计模式就是Adapter模式,有以下两种实现方式: 1. 类适配器模式(使用继承的适配器) 2. 对象适配器模式(使用委托的适配器)所谓继承和委托的区别在哪呢?委托是指将某个方法中的实际处理交给其他实例的方法,继承则是自己进行处理,下面分别看下两种实现方式: 代码清单 这里有一个需要被适配的Banner类 /** * 被适配角色:交

Factory Method模式

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