版权声明:本文为博主原创文章,未经博主允许不得转载。 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中的实现