创建型模式——工厂方法模式

1、工厂方法模式

工厂方法模式是简单工厂模式的进一步优化与抽象,解决了简单工厂无法支持继承这一缺点,使用面向对象的多态这一特性, 在工厂方法模式中,核心的工厂类本身不再直接去创建某一个具体的产品,而是将由子类去创建某一类的产品,这种改变使 得在引进一个或一类新的产品时,不再去修改核心的工厂类,而是改变具体的某个工厂子类,或者新增一个工厂子类专门负责新引进的产品。

2、工厂方法的类图


3、工厂方法的java实现

核心工厂类(接口)IFactory

public interface IFacroty {

	public IProduct getProduct();

}

核发产品类(接口)IProduct

public interface IProduct {
    public void show();

}

两个具体的工厂子类FactoryA FactoryB

public class FactoryA implements IFacroty {
    public FactoryA() {
    }

    public IProduct getProduct() {
        return new ProductA();
    }

}

public class FactoryB implements IFacroty {
	public FactoryB() {
	}

	public IProduct getProduct() {
		return new ProductB();
	}
}

两个具体的产品子类ProductA ProductB

public class ProductA implements IProduct {

    public ProductA() {
    }
    public void show() {
        System.out.println("这是一个A产品");
    }

}

public class ProductB implements IProduct {

    public ProductB() {
    }
    public void show() {
     System.out.println("这是一个B产品");
    }

}

用于测试的客户类

public class Client {
	public static void main(String[] args) {
		IFacroty facA,facB;
		IProduct pa,pb;
		facA = new FactoryA();
		facB = new FactoryB();
		pa = facA.getProduct();
		pb = facB.getProduct();
		pa.show();
		pb.show();
	}
}
最后运行程序输出:


4、工厂方法与简单工厂的比较

和简单工厂相比,在结构上有明显不同,工厂方法模式的核心是一个抽象的类或接口,简单工厂的核心一个具体的万能工厂类,工厂方法的核心抽象工厂类将创建产品的工作交由一个子类,而这些子类每个相当于简单工厂核心类的某一功能,从而将创建产品的工作进一步的向下细化,将简单工厂模式推广为一个更加综合多功能的工厂方法模式。所以工厂方法模式又称作是多态的简单工厂模式。
工厂方法模式中,所有的产品类都继承自同一个抽象的核心产品类,而工厂类返回的也不是一个具体的产品,而是产品的父类,所以用户在使用创建出来的产品是不知道产品的具体类型,只需使用产品完成自己所需的工作就够了。这个基于继承与多态的设计,将整个创建的过程与细节封装起来,而不被用户知道。 在新增产品也不必再去修改核心的工厂类,而只是修改或增加其子类。

5、工厂方法在java体系中应用

在java中的Collection接口下,有许多的集合子类(List,Queue,Set),每个集合子类都会实现 Iterator接口,集合子类可以调用iteartor()方法获得一个迭代器,这种体系结构就是运用工厂 方法模式。iteartor()方法就是一个用于创建具体迭代器(产品)的方法。Iterator接口就是所有 产品的父类,而Collection接口就是一个核心工厂类,而List,Queue就是其子接口,ArrayList就是其中 一个具体的工厂类,当其调用iterator()方法获得一个具体的迭代器时,就是个一个封闭的创建产品的 过程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值