码迷,mamicode.com
首页 > 其他好文 > 详细

Factory Method模式

时间:2018-10-05 22:40:15      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:rri   理解   err   str   抽象   new   流程   加工   使用   

第四章: 工厂模式

  工厂模式所包含的角色:

    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();
	}

}

 

Factory Method模式

标签:rri   理解   err   str   抽象   new   流程   加工   使用   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!