设计模式笔记—建造者模式

建造者模式

      概念:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在建造者模式中,通常有4个角色:Product产品类,Builde抽象建造者,ConcreteBuilder具体建造者,Director导演类。
          使用场景:(1)相同的方法,不同的执行顺序,产生不同的事件效应。(2)多个部件或零件,可以装配到一个对象中,但是产生的运行结果又不同时。(3)产品类非常复杂,或者产品类的调用顺序不同产生了不同的效能。(4)在对象创建过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到时,也可以采用建造者模式封装该对象的创建过程。
         案例:生产电脑
//计算机抽象类,即Product角色,通常是实现了模板方法模式
public abstract class Computer {
	protected String mBoard;
	protected String mDisplay;
	protected String mOS;
	public Computer() {
		super();
	}
	//设置CPU核心数
	public void setBoard(String board){
		mBoard=board;
	}
	//设置内存
	public void setDisplay(String display){
		mDisplay=display;
	}
	//设置操作系统
	public abstract void setOS();
	@Override
	public String toString() {
		return "Computer [mBoard= " + mBoard + ", mDisplay= " + mDisplay + ", mOS= " + mOS + "]";
	}
}
//具体的Computer类,Macbook
public class Macbook extends Computer {
	protected Macbook(){
	}
	@Override
	public void setOS() {
		mOS="Mac OS X 10.10";
	}
}
//抽象Builder类,规范产品的组建,一般由子类来实现
public abstract class Builder {
	//设置主机
	public abstract void buildBoard(String board);
	//设置显示器
	public abstract void buildDisplay(String display);
	//设置操作系统
	public abstract void buildOS();
	//创建Computer
	public abstract Computer create();
}
//具体的Builder类,MacbookBuilder
public class MacbookBuilder extends Builder{
	private Computer mComputer=new Macbook();
	@Override
	public void buildBoard(String board) {
		mComputer.setBoard(board);
	}
	@Override
	public void buildDisplay(String display) {
		mComputer.setDisplay(display);
	}
	@Override
	public void buildOS() {
		mComputer.setOS();
	}
	@Override
	public Computer create() {
		return mComputer;
	}
}
//Director类,负责构造Computer,及安排已有模块的顺序
public class Director {
	Builder mBuilder=null;
	//构造函数传递依赖对象
	public Director(Builder mBuilder) {
		super();
		this.mBuilder = mBuilder;
	}
	//构建对象
	public void construct(String board,String display){
		mBuilder.buildBoard(board);
		mBuilder.buildDisplay(display);
		mBuilder.buildOS();
	}
}
测试类
public class Test {
	public static void main(String[] args) {
		//构建器
		Builder builder=new MacbookBuilder();
		//Director
		Director pcDirector = new Director(builder);
		//封装构建过程,4核,内存2GB,Mac系统
		pcDirector.construct("Intel主板","Retina显示器");
		//构建计算机,输出相关信息
		System.out.println("Computer Info:"+builder.create().toString());
	}
}
运行结果:
Computer Info:Computer [mBoard= Intel主板, mDisplay= Retina显示器, mOS= Mac OS X 10.10]
        分析:通过具体的MacbookBuilder来构建Macbook对象,而Director封装了构建复杂产品对象的过程,对外隐藏构建细节。Builder与Director一起将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的对象。需要注意的是,在实际开发中,Director角色经常会被省略。而直接使用一个Builder来进行对象的组装,这个Builder通常为链式调用,它的关键点是每个setter方法都返回自身,也就是return this,这样就使得setter方法可以链式调用。如下:
new TestBuilder().setA("A").setB("B").create();
       通过这种形式不仅去除了Director角色,整个结构也更加简单,也能对Product对象的组装过程有更精细的控制。
      建造者模式优点 :(1)封装性,使客户端不必知道产品内部组成的细节(2)建造者独立,容易扩展(3)便于控制细节风险,由于具体的建造者是独立的,因此可以对建造者过程逐步细化,而不对其他的模块产生任何影响。

Android中的应用
      在Android中常见到Builder模式是对话框的创建,使用Builder来构建复杂的AlertDialog对象,如下:
private void showDialog(Context context){
        AlertDialog.Builder builder=new AlertDialog.Builder(this);
        //构建AlertDialog
        AlertDialog dialog=builder.setTitle("标题")
                .setIcon(android.R.drawable.ic_dialog_alert)
                .setView(R.layout.activity_main)
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                })
                .create();
        // 显示AlertDialog
        dialog.show();
    }
}
      分析:通过Builder对象来组装Dialog的各个部分,如title,buttons,Message,icon等,将Dialog的构造和表示进行分离。
       Builder模式在框架中的应用:
Picasso.with(getApplicationContext()).load(urlPic).into(ivPica);
public class Picasso {
...
public static Picasso with(Context context) {
    if (singleton == null) {
      synchronized (Picasso.class) {
        if (singleton == null) {
          singleton = new Builder(context).build();
        }
      }
    }
    return singleton;
  }
 public static class Builder {
    private final Context context;
    private Downloader downloader;
    private ExecutorService service;
    private Cache cache;
	 public Builder(Context context) {
      if (context == null) {
        throw new IllegalArgumentException("Context must not be null.");
      }
      this.context = context.getApplicationContext();
    }
	 /** Create the {@link Picasso} instance. */
    public Picasso build() {
      Context context = this.context;
      if (downloader == null) {
        downloader = Utils.createDefaultDownloader(context);
      }
      if (cache == null) {
        cache = new LruCache(context);
      }
      if (service == null) {
        service = new PicassoExecutorService();
      }
      return new Picasso(context, dispatcher, cache, listener, transformer, requestHandlers, stats,
          defaultBitmapConfig, indicatorsEnabled, loggingEnabled);
    }
	}
...
}
      Builder模式在Java中的应用:
        StringBuilder builder = new StringBuilder();
	builder.append("str1").append("str2").append("str3");

       






    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园2.0是高校信息化建设的新阶段,它面对着外部环境变化和内生动力的双重影响。国家战略要求和信息技术的快速发展,如云计算、大数据、物联网等,为智慧校园建设提供了机遇,同时也带来了挑战。智慧校园2.0强调以服务至上的办学理念,推动了教育模式的创新,并对传统人才培养模式产生了重大影响。 智慧校园建设的解决之道是构建一个开放、共享的信息化生态系统,利用互联网思维,打造柔性灵活的基础设施和强大的基础服务能力。这种生态系统支持快速迭代的开发和持续运营交付能力,同时注重用户体验,推动服务创新和管理变革。智慧校园的核心思想是“大平台+微应用+开放生态”,通过解耦、重构和统一运维监控,实现服务复用和深度融合,促进业务的快速迭代和自我演化。 智慧校园的总体框架包括多端协同,即“端”,它强调以人为中心,全面感知和捕获行为数据。这涉及到智能感知设备、超级APP、校园融合门户等,实现一“码”或“脸”通行,提供线上线下服务端的无缝连接。此外,中台战略是智慧校园建设的关键,包括业务中台和数据中台,它们支持教育资源域、教学服务域等多个领域,实现业务的深度融合和数据的全面治理。 在技术层面,智慧校园的建设需要分期进行,逐步解耦应用,优先发展轻量级应用,并逐步覆盖更多业务场景。技术升级路径包括业务数据化、数据业务化、校园设施智联化等,利用IoT/5G等技术实现设备的泛在互联,并通过人工智能与物联网技术的结合,建设智联网。这将有助于实现线上线下一网通办,提升校园安全和学习生活体验,同时支持人才培养改革和后勤管理的精细化。 智慧校园的建设不仅仅是技术的升级,更是对教育模式和管理方式的全面革新。通过构建开放、共享的信息化生态系统,智慧校园能够更好地适应快速变化的教育需求,提供更加个性化和高效的服务,推动教育创新和人才培养的高质量发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值