通过前面的学习我想大家已经了解了三种基本的设计模式,本次我们将讲解一下“创建者模式”。下面我们将通过摩托车的组装过程来讲解一下创建者模式的具体实现。我们要组装一个摩托车,那么我们需要很多的零件,各种品牌各种型号。如果我们仍用前面讲过的设计模式来设计,则客户端将便的异常庞大,曾加了代码的调试量。那么,我们可以专门创建一个类,用来实现摩托车的组装。这种方法就叫做“创建者模式”。
定义:创建者模式就是将一个复杂对象的构建与它的表示分离,使得同样的创建过程可以创建不同的表示,而且客户端不同知道对象的构建细节。
组成:创建者模式主要由5个部分组成:组装类、抽象创建者类、实现抽象创建者类的具体创建者类、抽象产品类和实现抽象产品类的具体类。
使用时机:当系统需要创建一个复杂的对象,而且这个复杂的对象组装起来比较麻烦时,可以使用创建者模式。
实现代码:
//抽象摩托类
public interface Motorcycle {
void build();
}
//具体的摩托车类
public class Motorcycle1 implements Motorcycle {
public void build(){
System.out.println("组装摩托车开始");
}
}
//抽象车架类
public interface Carcase {
void build();
}
//抽象车轮类
public interface Wheel {
void build();
}
//抽象轮胎类
public interface Tyre {
void build();
}
//抽象发动机类
public interface Engine {
void build();
}
//具体车架类
public class Carcase1 implements Carcase{
public void build(){
System.out.println("组装摩托车车架开始");
}
}
//具体车轮类
public class Wheel1 implements Wheel{
public void build(){
System.out.println("组装摩托车车轮开始");
}
}
//具体轮胎类
public class Tyre1 implements Tyre{
public void build(){
System.out.println("组装摩托车轮胎开始");
}
}
//具体发动机类
public class Engine1 implements Engine{
public void build(){
System.out.println("组装摩托车发动机开始");
}
}
//抽象工厂类
public interface Factory {
Carcase createCarcase();
Wheel createWheel();
Tyre createType();
Engine createEngine();
}
//具体工厂类
public class MotorcycleFactory implements Factory{
/*创建车架对象*/
public Carcase createCarcase() {
return new Carcase1();
}
/*创建发动机对象*/
public Engine createEngine() {
return new Engine1();
}
/*创建轮胎对象*/
public Tyre createType() {
return new Tyre1();
}
/*创建车轮对象*/
public Wheel createWheel() {
return new Wheel1();
}
}
//创建组装类
public class Director {
private Factory factory;
public Director(Factory factory){
this.factory = factory;
}
public Motorcycle assmbleMotorcycle(){
Carcase carcase = factory.createCarcase();
carcase.build();
Wheel wheel = factory.createWheel();
wheel.build();
Tyre tyre = factory.createType();
tyre.build();
Engine engine = factory.createEngine();
engine.build();
return new Motorcycle1();
}
}
//客户端最终实现
public class Client {
public static void main(String [] args){
Director director = new Director(new MotorcycleFactory());
Motorcycle motorcycle = director.assmbleMotorcycle();
}
}
这样我们将多有的动作都放在了组装类中进行,而客户端的工作则少了很多。
优点:在创建者模式中,客户端不再负责对象的创建和组装,而是把这个创建的责任交给具体的创建者类,把组装的责任讲给组装类,客户端只负责对象的调用,从而明确了各个类的职责。
缺点:虽然利用创建者模式可以创建出不同类型的产品,但如果产品之间的差异非常大,则需要编写过个创建者类才能实现,这是如果结合工厂模式更好。