设计模式的应用场景(3)--创建者模式

来源:互联网 发布:java中cgi 编辑:程序博客网 时间:2024/06/06 05:46

创建者模式

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

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

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

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

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

摩托车组装系统 :
摩托车 = 车架 + 车轮 + 轮胎 + 发动机。

//摩托车类:  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 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(); }}
原创粉丝点击