JAVA24种模式-------builder模式

JAVA24种模式-------builder模式``
       刚学java一个学期就被导师要求了解java24种设计模式,明明练习都没有两年半啊。希望我能在写博客的时候能慢慢学会builder模式。第一次用markdown,排版不好的地方以及对我写的内容有不同理解的欢迎指出、留言、私信。:)废话不多说,下面就来了解builder模式吧。

1、什么是builder模式,为什么要有builder类

       在看了好几篇关于builder模式的博客后以及阅读了《图解设计模式》之后,对于该模式我的理解是,由于我们很难或者说将一个复杂事物一气呵成,即通过一个class就构建完这个事物的算法逻辑,我们可以将复杂事物的组成先构建出来,再拼接成这个事物,因此使得复杂对象的构建与其表示分离。同时,由于这种自下而上的构建方法使上级类不需要知道下级类使如何实现目标的,从而大大降低了代码的耦合性,能够重复在不同场合调用。

2、Builder模式简单示例

此处引用《图解设计模式》上的例子。
我们要输入一批文字,但是我们希望能有多种输入的方式,例如文档输入或者HTML输入。

//首先我们确定了要输入的文本内容。同时,由于采用了Builder模式
class Director{
	private Builder builder;
	public Director(Builder builder) {//抽象类无法创建实例对象,所以此处传递的是其子类创建的对象
		this.builder = builder; //通过这种方法实现了不同的功能
	}
	public void construct() {   //我要写进为文档的内容,但是写入的方式不同
		builder.makeTitle("Greeting");//写入的方式有传进构造器的builder类型决定。此处实现了数值域与方法操作的分离
		builder.makeString("从早上到下午");
		builder.makeItems(new String[] {
				"晚上好","晚安","再见"
		});
		builder.close();
	}
}
abstract class Builder{    //由于我们要能够实现各种各样的同一类型但是不同种类的表示方法,所以定义一个抽象类来规定各种类型表示方法所要实现的具体方法
	public abstract void makeTitle(String title);
	public abstract void makeString(String str);
	public abstract void makeItems(String[] items);
	public abstract void close();
}
class TextBuilder extends Builder{  //具体实现的方法之一:文档输入
	private StringBuffer buffer = new StringBuffer();//文档内容保存在该字段
	
	public void makeTitle(String title) {
		buffer.append("==================\n");
		buffer.append("[" + title + "]");
		buffer.append("\n");
	}
	public void makeString(String str) {
		buffer.append('#'+str+"\n");
		buffer.append("\n");
	}
	public void makeItems(String[] items) {
		for(int i = 0; i < items.length; i++) {
			buffer.append("   " + items[i] + "\n");
		}
	}
	public void close() {
		buffer.append("==================\n");
	}
	public String getResult() {
		return buffer.toString();//将StringBuffer变为String
	}
}

class HTMLBuilder extends Builder{//具体实现的方法之一:HTML输入
	。。。。。。
}

Builder模式的运行从Main种可以看出

public static void main(String[] args) {
		// TODO Auto-generated method stub
		TextBuilder textbuilder = new TextBuilder();//选择所想要的表示方法
		Director director = new Director(textbuilder);在“机器”种确定该表示方法
		director.construct();//将已知数据传入到能实现这个表示方法的机器中
		String result = textbuilder.getResult();
		System.out.println(result);
	}

于是我们可以总结一下如何通过Builder模式来创建一个复杂的物体。

(一)抽象的实现者(上述代码中的Builder类)

       这是由于Builder模式设计的各种表示方法具有其共通性,所以需要一个用于定义实例所要实现的方法的抽象类。其好处在于我们不需要在具体使用的时候在调用的类(代码中的Director类)里创建对应的构造器。

(二)具体的实现者(上述代码中的TextBuilder类)

       负责实现抽象实现者的接口的类。描述了在生成实例的时候如何具体实现方法,因此决定了生成最终结果的方法。

(三)数据传递者/监工(上述代码中的Director类)

       负责使用抽象实现者的接口来生成实例,因此它并不依赖于具体实现者。也可以将他看作一个传递数据到具体表示方法的中间媒介,它组装了各种功能。

3、总结与思考

       使用Builder模式是为了创建一个对象,所以最终实现的结果要是一个具体对象。在Builder模式中发生变化的是具体表达方式,不变的是各种表达方式的组合方法以及表达方式的具体要求。

       Builder模式的优点在于其代码清晰,易维护,易扩展;将构造和表示分离,降低耦合。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java设计模式是一组经过实践验证的面向对象设计原则和模式,可以帮助开发人员解决常见的软件设计问题。下面是常见的23设计模式: 1. 创建型模式(Creational Patterns): - 工厂方法模式(Factory Method Pattern) - 抽象工厂模式(Abstract Factory Pattern) - 单例模式(Singleton Pattern) - 原型模式(Prototype Pattern) - 建造者模式Builder Pattern) 2. 结构型模式(Structural Patterns): - 适配器模式(Adapter Pattern) - 桥接模式(Bridge Pattern) - 组合模式(Composite Pattern) - 装饰器模式(Decorator Pattern) - 外观模式(Facade Pattern) - 享元模式(Flyweight Pattern) - 代理模式(Proxy Pattern) 3. 行为型模式(Behavioral Patterns): - 责任链模式(Chain of Responsibility Pattern) - 命令模式(Command Pattern) - 解释器模式(Interpreter Pattern) - 迭代器模式(Iterator Pattern) - 中介者模式(Mediator Pattern) - 备忘录模式(Memento Pattern) - 观察者模式(Observer Pattern) - 状态模式(State Pattern) - 策略模式(Strategy Pattern) - 模板方法模式(Template Method Pattern) - 访问者模式(Visitor Pattern) 4. 并发型模式(Concurrency Patterns): - 保护性暂停模式(Guarded Suspension Pattern) - 生产者-消费者模式(Producer-Consumer Pattern) - 读写锁模式(Read-Write Lock Pattern) - 信号量模式(Semaphore Pattern) - 线程池模式(Thread Pool Pattern) 这些设计模式可以根据问题的特点和需求来选择使用,它们提供了一些可复用的解决方案,有助于开发高质量、可维护且易于扩展的软件系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值