易学设计模式看书笔记(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.优缺点

【优点】

在创建者类中,客户端不再负责对象的创建和组装,而是把这个创建的责任交给

具体的创建者类,吧组装的工作交给具体的组装类,客户端只负责对象的调用,

明确了各个类的职责。

【缺点】

虽然利用创建者模式可以创建出不同类型的产品,但如果产品之间的差异过大,则

需要编写多个创建者类才能实现,这是如果结合工厂模式更好。

时间: 2024-10-02 06:47:17

易学设计模式看书笔记(6) - 创建者模式的相关文章

易学设计模式看书笔记(7) - 代理模式

代理模式 1.系统日志记录的例子:给系统中的业务逻辑加上日志 (1):最简单直接的做法 public class Test { private Logger logger = Loger.getLogger(this.getClass().getName()); public void doLgic(String name){ logger.log(name + "开始业务逻辑处理..."); //业务逻辑处理相关程序 System.out.println("业务逻辑处理相关

易学设计模式看书笔记(2) - 简单工厂模式

本文摘自易学设计模式一书 一.简单工厂模式 1.动物管理系统的例子 public interface Animal{ public void eat(); } public class Tiger implements Animal { public void eat(){ sysout.out.println("老虎会吃"); }; public void run(){ sysout.out.println("老虎会跑"); }; } public class D

易学设计模式看书笔记(4) - 抽象工厂模式

 本文内容来自书上,不懂设计模式,只求混个眼熟. 三.抽象工厂模式 1.动物管理系统的例子 public interface Animal{ public void eat(); } public class Tiger implements Animal { public void eat(){ sysout.out.println("老虎会吃"); }; public void run(){ sysout.out.println("老虎会跑"); }; } pu

易学设计模式看书笔记(3) - 工厂方法模式

二.工厂方法模式 1.动物管理系统的例子 首先,抽象的动物类和具体的动物实现类: public interface Animal{ public void eat(); } public class Tiger implements Animal { public void eat(){ sysout.out.println("老虎会吃"); }; public void run(){ sysout.out.println("老虎会跑"); }; } public

易学设计模式看书笔记(1) - 设计模式的分类

1 创建型模式 单独对对象的创建进行研究,高效的创建对象就是创建型模式讨论的问题.创建型设计模式有6种: 简单工厂模式(simple factory): 工厂方法模式(factory method): 抽象工厂模式(abstract factory): 创建者模式(Builder): 原型模式(Prototype): 单例模式(Singleton). 2 结构型模式 在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了关注的焦点,因为如何设计对象之间的结构.继承和依赖关系会影响到后

设计模式看书笔记(5) - 三种工厂模式比较

先看三种工厂模式部分主要代码(完整代码在前三篇博客): 简单工厂模式: public class SampleFactory { public static Animal createAnimal(String animalName){ if("Tiger".equals(animalName))){ return new Triger(); }else if("Dolphin".equals(animalName)){ return new Dolphin();

《Head First 设计模式》学习笔记——适配器模式 + 外观模式

在ADO.NET中,对于我们从数据库中取出的数据都要放到一个DataSet中,不管你是Access的数据库,还是SQL的数据库,或者是Oracle的数据库都要放到DataSet中..NET中并没有提供如:SqlDataSet.OleDbDataSet.OracleDataSet等,它只提供了一种DataSet就是用SqlDataAdapte等去填充数据:为什么这一个DataSet能存放不同的数据呢?就是有这些适配器来适配.----题记 设计模式 适配器模式:将一个类的接口,转换成客户期待的另一个

"围观"设计模式(9)--创建型之创建者模式(Builder Pattern)

生成器模式(英:Builder Pattern)是一种设计模式,又名:建造模式,是一种对象构建模式.它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象.----WIKIPEDIA 个人的理解: 建造者模式可以设置不同的属性或者行为,创建出不一样的对象.比如说生产汽车,假如有三个重要的工序,塑形.拼装.上色.那么可以通过创建者模式来设置,这三道工序中不同的车来说,三道工序可能就是不一样的.通过创建者模式来创建出对象的表现形式也自然就不一样.

《c语言从入门到精通》看书笔记——第3章 数据类型

1.编程规范 (1)代码缩进:统一为4字符,用Tab (2)变量常量命名规范:常量命名统一为大写格式.如果成员变量,均以m_开始.普通变量,取与实际意义相关的名称,要在前面添加类型的首字母,并且名称的首字母要大写.如果是指针,则为其标识符全添加p字符,并且名称首字母要大写. (3)函数的命名规范:函数的首字母要大写 (4)注释 2.C语言有32个关键字,关键字不允许作为标识符出现在程序中 auto 局部变量(自动储存) break无条件退出程序最内层循环 case   switch语句中选择项