Factory Method模式

第四章: 工厂模式

  工厂模式所包含的角色:

    1.Product(产品)

    2.Creator(创建者)

    3.ConcreateProduct(具体的产品)

    4.ConcreateCreator(具体的创建者)

  实现流程: 定义抽象产品(Product),在抽象产品(Product)中可以定义需要实现的抽象方法,工厂模式在使用中一般都是以多态形式使用,如:

Factory f = new XXXFactory("XXX");
f.xxx();

其中f.xxx();就是你在产品(Product)类中定义的方法,可以理解为你的产品造出来后,怎么去使用,那么就在这里定义。

  接着还需要抽象工厂,这里用到了模板模式(Template),在抽象工厂类中都会有Create();这个方法,在这个方法中可以放入需要的参数,可以理解为在加工产品是需要用到的‘原料’!

 如果用到工厂模式,那么在一般情况下都是有较为复杂逻辑,在Create()这个方法中就可以去进行产品的创建以及‘加工‘。

 具体产品类是必须的,继承抽象产品(Product),其中关系就比如联想Thinkpad继承电脑这样,电脑有开机方法,那么Thinkpad去继承它。

 具体工厂,抽象工厂只定义抽象方法,是具体工厂的父类,在具体工厂中再去进行new对象,完成在抽象工厂中定义的一系列流程。

 Code:

  抽象工厂:

package example.factory.method;

/**
 * 用于生成Product类,并对Product进行"加工"
 * @author Administrator
 *
 */
public abstract class Factory {

		public final Product create(String owner) {
			Product p = createProduct(owner);
			registerProduct(p);
			return p;
		}

		protected abstract void registerProduct(Product p);

		protected abstract Product createProduct(String owner);
}

  抽象产品:

package example.factory.method;

/***
 * 只定义抽闲方法的抽象类,use
 * @author Administrator
 *
 */
public abstract class Product {
		public abstract void use ();
}

  具体产品:

package example.factory.method;
/**
 * 产品,继承Product类的use使用功能。
 * @author Administrator
 *
 */
public class IDCard extends Product{

	private String owner;

	@Override
	public void use() {
		System.out.println("使用了" + owner + "的ID卡");
	}

	IDCard(String owner){
		System.out.println("制作" + owner + "的ID卡");
		this.owner = owner;
	}

	public String getOwner() {
		return owner;
	}

}

 具体工厂:

package example.factory.method;

import java.util.ArrayList;
import java.util.List;

public class IdCardFactory extends Factory{

	private List<String> owners = new ArrayList<>();

	@Override
	protected void registerProduct(Product p) {
		owners.add(((IDCard)p).getOwner());
	}

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

}
package example.factory.method;

public class Main {

	public static void main(String[] args) {
		Factory factory = new IdCardFactory();

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

}

原文地址:https://www.cnblogs.com/yangchaojie/p/9745994.html

时间: 2024-08-28 20:32:03

Factory Method模式的相关文章

设计模式初学者笔记: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模式

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

设计模式:factory method模式

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

工厂方法(Factory Method)模式

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

设计模式之六:工厂方法模式(Factory method Pattern)

工厂方法(Factory Method)模式就是定义一个创建对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责具体产品的创建,仅提供了具体工厂子类必须实现的接口,这样核心类成为一个抽象工厂角色,这样做的好处是工厂方法模式可以使系统在不修改具体工厂角色的情况下进行引进新的产品. 在Factory Method模式中,工厂类与产品类往往具有平行的等级结构,它们之间一一对应. 从上图可以看出,工厂方法模式有四个角色: 抽象工厂角色(ICreator):是工厂方法模式的核心,与应用程序无

C++设计模式 之 “对象创建”模式:Factory Method

part 0 “对象创建”模式 通过“对象创建” 模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定.它是接口抽象之后的第一步工作. 典型模式 Factory Method Abstract Factory Prototype Builder Part 1 Factory Method 工厂方法 动机(Motivation) 在软件系统中,经常面临着创建对象的工作:由于需求的变化,需要创建的对象的具体类型经常变化. 如何应对这种变化?如何绕过常规的

工厂方法模式(FACTORY METHOD)

核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦.复用和方便后期维护拓展的目的. 工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.使一个类的实例化延迟到其子类. 核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂 角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品. 简单工厂模式跟工厂方法模式区别是:简单工厂