内容简介:定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。对于简单工厂模式,我们知道其在工厂类中包含了必要的逻辑判断,根据不同的条件来动态实例化相关类。对于客户端来说,这去除了与具体产品的依赖;但于此同时也带来了一个问题:如果我们要增加产品,比如我们要生产苹果计算机,就需要在工厂类中添加一个
定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法与简单工厂
对于简单工厂模式,我们知道其在工厂类中包含了必要的逻辑判断,根据不同的条件来动态实例化相关类。对于客户端来说,这去除了与具体产品的依赖;但于此同时也带来了一个问题:如果我们要增加产品,比如我们要生产苹果计算机,就需要在工厂类中添加一个 Case
分支条件,这违背了开放封闭原则,对修改也开放了。而工厂方法模式就没有违背这个开放封闭原则。如果我们需要生产苹果电脑,则无需修改工厂类,直接创建产品即可。
角色
- Product :抽象产品类。
-
ConcreteProduct
:具体产品类,实现
Product接口。 -
Factory
:抽象工厂类,该方法返回一个
Product类型的对象。 -
ConcreteFactory
:具体工厂类,返回
ConcreteProduct实例。
工厂方法模式的简单实现
- 首先创建一个计算机的抽象产品类,其中有一个抽象方法用户启动计算机生产:
public abstract class Computer {
/**
* 产品的抽象方法,由具体的产品类实现
*/
public abstract void start();
}
复制代码
-
接着我们创建各个品牌的计算机,其都继承了自己的父类
Computer,并实现了父类的start方法。
public class LenovoComputer extends Computer {
@Override
public void start() {
System.out.println("联想计算机启动");
}
}
public class HpComputer extends Computer {
@Override
public void start() {
System.out.println("惠普计算机启动");
}
}
public class AsusComputer extends Computer {
@Override
public void start() {
System.out.println("华硕计算机启动");
}
}
复制代码
-
创建抽象工厂类,里面有一个
createComputer方法,用于生产各种品牌的计算机。
public abstract class ComputerFactory {
public abstract <T extends Computer> T createComputer(Class<T> clz);
}
复制代码
- 创建具体工厂,广大代工厂是一个具体的工厂,其继承抽象工厂,通过反射来生产不同厂家的计算机。
public class GDComputerFactory extends ComputerFactory {
@Override
public <T extends Computer> T createComputer(Class<T> clz) {
Computer computer = null;
String className = clz.getName();
try {
//通过反射来生产不同厂家的计算机
computer = (Computer)Class.forName(className).newInstance();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return (T) computer;
}
}
复制代码
-
客户端调用,客户端创建
GDComputerFactory生产各种计算机。
public class Client {
public static void main(String[] args) {
ComputerFactory computerFactory = new GDComputerFactory();
LenovoComputer mLenovoComputer = computerFactory.createComputer(LenovoComputer.class);
mLenovoComputer.start();
HpComputer mHpComputer = computerFactory.createComputer(HpComputer.class);
mHpComputer.start();
AsusComputer mAsusComputer = computerFactory.createComputer(AsusComputer.class);
mAsusComputer.start();
}
}
复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 设计模式——订阅模式(观察者模式)
- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- java23种设计模式-门面模式(外观模式)
- 设计模式-享元设计模式
- Java 设计模式之工厂方法模式与抽象工厂模式
- JAVA设计模式之模板方法模式和建造者模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Alone Together
Sherry Turkle / Basic Books / 2011-1-11 / USD 28.95
Consider Facebookit’s human contact, only easier to engage with and easier to avoid. Developing technology promises closeness. Sometimes it delivers, but much of our modern life leaves us less connect......一起来看看 《Alone Together》 这本书的介绍吧!