设计模式 - Factory Method

Factory Method 模式:

  • 父类决定实例的生成方式,但是不决定所要生成的具体的类,具体的处理全部交给子类负责,这样就可以将生成实例的框架和实际负责生成实例的类解耦。

实例:

  • 模板可以使用两个抽象类,一个是ProductFactory,一个是Product,只为简单模拟,Product接口有作为一个产品使用的方法use,ProductFactory则是创建产品也就是Product,返回Product实例的方法createProduct,使用create方法来固定生产产品以及注册产品的步骤,使用了Template模式。
  • 而具体的实现是交给子类去实现的,比如我们要制造Book这个产品,我们需要使用Book来实现Product类,重写use()方法,符合Book这个产品的使用方式,用BookFactory 来返回Book这个实例。

Product 类:


public abstract class Product {
	private String productName;
	public Product(String productName) {
		this.productName = productName;
	}
	public abstract void use();
}

ProductFactory 类:

public abstract class ProductFactory {
	public abstract Product createProduct(String productName);
	public abstract void registerProduct(Product product);
	public Product create(String productName) {
		Product product = createProduct(productName);
		registerProduct(product);
		return product;
	}
}

Book 类:


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Book extends Product {
	private Logger logger = LoggerFactory.getLogger(Book.class);
	private String bookName;
	Book(String bookName) {
		super(bookName);
		this.bookName = bookName;
	}
	@Override
	public void use() {
		logger.info("You can read {} by yourself",bookName);
	}
	@Override
	public String toString() {
		return "bookName=" + bookName ;
	}
	
}

BookFactory 类:


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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class BookFactory extends ProductFactory{
	private Logger logger = LoggerFactory.getLogger(BookFactory.class);
	private List<Book> bookList = new ArrayList<>();
	@Override
	public Product createProduct(String productName) {
		Book book = new Book(productName);
		return book;
	}
	@Override
	public void registerProduct(Product product) {
		bookList.add((Book) product);
		logger.info("{}",bookList);
	}
	

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值