设计模式(Java随笔)—工厂模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40780805/article/details/82939842

工厂模式(Factory Pattern)

话不多说,先贴定义:

Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to subclassess.

    定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。(来源:百度)

一、简单工厂模式(静态工厂方法模式)——定义一个用于创建对象的接口。

 如果一个(一些)对象(产品),已经确定了并不易改变和添加新的产品,那么就可以使用简单工厂模式。

//简单工厂模式——不易维护,如果需要添加新的产品,则整个系统都需要修改。
// 1、对象(产品)接口
interface ThinkPad {
	public void print();
}

// 2、产品实类-实现接口
class E465 implements ThinkPad {
	@Override
	public void print() {
		System.out.println("I AM THINKPAD-E465!!");
	}
}

class E460 implements ThinkPad {
	@Override
	public void print() {
		System.out.println("I AM THINKPAD-E460!!");
	}
}

// 简单工厂实现
class SimpleFactory {
	ThinkPad getInstance(String type) throws Exception{
		if (type.equalsIgnoreCase("E460")) {
			return new E460();
		} else if (type.equalsIgnoreCase("E465")) {
			return new E465();
		} else {
			throw new Exception("THIS TYPE IS NO EXIST!!");
		}

	}
}

二、工厂模式——将工厂也定义为一个接口,然后由具体的工厂来确定需要生成什么样的产品

集合中iterator()方法就是一种工厂方法;

//工厂模式——工厂方法模式的核心是一个抽象工厂类,而不像简单工厂模式, 把核心放在一个实类上。
// 1、对象(产品)接口
interface ThinkPad {
	public void print();
}

// 2、实类-实现接口
class E465 implements ThinkPad {
	@Override
	public void print() {
		System.out.println("I AM THINKPAD-E465!!");
	}
}

class E460 implements ThinkPad {
	@Override
	public void print() {
		System.out.println("I AM THINKPAD-E460!!");
	}
}

//工厂模式-抽象工厂接口
interface Factory{
	ThinkPad getInstance();
}

//工厂模式-工厂实现类1
class E465Factory implements Factory{
	@Override
	public ThinkPad getInstance(){
		return new E465();
	}
}

//工厂模式-工厂实现类2
class E460Factory implements Factory{
	@Override
	public ThinkPad getInstance(){
		return new E460();
	}
}

参考文章:23种设计模式介绍以及在Java中的实现

猜你喜欢

转载自blog.csdn.net/qq_40780805/article/details/82939842