首页 > 代码库 > 易学设计模式看书笔记(6) - 创建者模式

易学设计模式看书笔记(6) - 创建者模式


四、创建者模式

1.摩托车组装系统

觉得这些例子挺适合入门的,容易理解,
看了之后大概是个什么样子的就有了印象。

摩托车 = 车架 + 车轮 + 轮胎 + 发动机。

首先设计摩托车类以及各零件类:

摩托车类:public interface Motorcycle{ void build();}public class Motorcycle1 implements Motorcycle{ void build(){ Sysout.out.println("组装摩托车开始..."); }}以下是摩托车零件类:摩托车架类:public interface Carcase{ void build();}public class Carcase1 implements Carcase{ void build(){ Sysout.out.println("组装摩托车架开始..."); }}车轮类:public interface Wheel{ void build();}public class Wheel1 implements Wheel{ void build(){ Sysout.out.println("组装摩托车轮开始..."); }}轮胎类:public interface Tyre{ void build();}public class Tyre1 implements Tyre{ void build(){ Sysout.out.println("组装摩托轮胎开始..."); }}发动机类:public interface Engine{ void build();}public class Engine1 implements Engine{ void build(){ Sysout.out.println("组装发动机开始..."); }}

然后设计一个只负责定义创建方式的抽象工厂类:

public interface Factory{ Carcase createCarcase();//创建车架对象 Wheel createWheel();//创建车轮对象 Tyre createTyre();//创建轮胎对象 Engine createEngine();//创建发动机对象}public class MotorcycleFactory implements Factory{ publci Carcase createCarcase(){  return new Carcase1(); } Wheel createWheel(){  return new Wheel1(); }; Tyre createTyre(){  return new Tyre1(); }; Engine createEngine(){  return new Engine1(); };}

用工厂方法模式和抽象工厂模式结合设计,代码如下:

public class Client { public static void main(String[] args)  {  Factory factory = new MotorcycleFactory();  Carcase carcase = factory.createCarcase();  carcase.build();  Wheel wheel = factory.createWhee();  wheel.build();  Tyre tyre = factory.createTyre();  tyre.build();  Engine engine = factory.CreateEngine();  engine.build();  //对摩托车零件进行组装  return new Motorcycle1(); }}

这样子功能是实现了,但是感觉比较怪,存在一些问题:
摩托车零件比较多,客户端组装比较麻烦,如果把摩托车的组装放在
工厂里,那么工厂类也很麻烦。
解决办法:
继续划分职责,增加一个单独的类来负责摩托车的组装。

增加一个组装类来负责产品的组装,工厂类只负责创建,
客户端直接调用组装类。

增加的组装类

public class Director{ private Factory factory; public void Director(Factory factory){  this.factory = factory; }  public Motorcycle assembleMotorcycle(){  Carcase carcase = factory.createCarcase();  carcase.build();  Wheel wheel = factory.createWhee();  wheel.build();  Tyre tyre = factory.createTyre();  tyre.build();  Engine engine = factory.CreateEngine();  engine.build();  //对摩托车零件进行组装  return new Motorcycle1(); }}

这样客户端调用就简单了:

public class Client
{
 public static void main(String[] args){
  Directorr director = new Director( new MotorcycleFactory() );
  Motorcycle motorcycle = director.assembleMotorcycle();
 }
}

2.创建者模式简介

【定义】:
创建者模式就是将一个复杂对象的创建与它的表示分离,
是的同样的构建过程可以创建不同的表示,客户端不需要
知道对象的创建细节。

【原理】
创建者模式主要由5部分组成:
组装类、抽象创建者类 以及具体创建者类、抽象产品类 以及具体产品类。

【使用时机】
当系统需要创建一个复杂的对象,而且这个复杂的对象组装起来比较麻烦时,
可以使用创建者模式。

3.优缺点
【优点】
在创建者类中,客户端不再负责对象的创建和组装,而是把这个创建的责任交给
具体的创建者类,吧组装的工作交给具体的组装类,客户端只负责对象的调用,
明确了各个类的职责。

【缺点】
虽然利用创建者模式可以创建出不同类型的产品,但如果产品之间的差异过大,则
需要编写多个创建者类才能实现,这是如果结合工厂模式更好。

易学设计模式看书笔记(6) - 创建者模式