zoukankan      html  css  js  c++  java
  • 设计模式(四)建造者模式

    定义:

      建造者模式或者生成器模式(Builder),是由GoF提出的23种设计模式中的一种。
      Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。

    结构:

    建造者模式结构图

    应用场景

    • 对象的创建:Builder模式是为对象的创建而设计的模式。

    • 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象。

    • 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法。

    举例

    • 有这么一个普通的House类,一般情况下我们会让客户直接new出一个对象,然后再通过set属性的方法进行造房子,但这样会把所有实现的细节全都暴露给客户,由客户对房子进行修饰,这样会有一个问题,有时候我们并不想让实现细节暴露出来,因此,就要引入了建造者模式。

        /*房子对象*/
        public class House {
        	// 地板
        	private String floor;
        	// 墙
        	private String wall;
        	// 屋顶
        	private String housetop;
        
        	public String getFloor() {
        		return floor;
        	}
        
        	public void setFloor(String floor) {
        		this.floor = floor;
        	}
        
        	public String getWall() {
        		return wall;
        	}
        
        	public void setWall(String wall) {
        		this.wall = wall;
        	}
        
        	public String getHousetop() {
        		return housetop;
        	}
        
        	public void setHousetop(String housetop) {
        		this.housetop = housetop;
        	}
        
        }
      
      
         //客户直接造房子
         House house = new House();
         house.setFloor("地板");
         house.setWall("墙");
         house.setHousetop("屋顶");
      
    • 使用建造者模式对对象进行装饰:

      • Concrete对象:抽象的工程队,可以完成一系列的操作。

          /* 工程队*/
          public interface HouseBuilder {
          	// 修地板
          	public void makeFloor();
          
          	// 修墙
          	public void makeWall();
          
          	// 修屋顶
          	public void makeHousetop();
          
          	// 获取对象
          	public House getHouse();
          }
        
      • Builder:

          /*公寓工程队*/
          public class GongyuBuilder implements HouseBuilder{
          	House house = new House();
          	
          	public House getHouse() {
          		return house;
          	}
          
          	public void makeFloor() {
          		house.setFloor("公寓-->地板");
          	}
          
          	public void makeHousetop() {
          		house.setHousetop("公寓-->房顶");
          	}
          
          	public void makeWall() {
          		house.setWall("公寓-->墙");
          	}
          	
          }
        
          /*平房工程队*/
          
          public class PingFangBuilder implements HouseBuilder {
          	House house = new House();
          
          	public void makeFloor() {
          		house.setFloor("平房-->地板");
          	}
          
          	public void makeHousetop() {
          		house.setHousetop("平房-->房顶");
          	}
          
          	public void makeWall() {
          		house.setWall("平房-->墙");
          	}
          
          	public House getHouse() {
          		return house;
          	}
          
          }
        
      • Director:设计者,对屋子进行构建。

          public class HouseDirector {
          
          	public void makeHouse(HouseBuilder builder) {
          		builder.makeFloor();
          		builder.makeWall();
          		builder.makeHousetop();
          	}
          
          }
        
      • MainClass:

          public class MainClass {
          
          	public static void main(String[] args) {
          
          		// 设计者来设计屋子
          		HouseDirector director = new HouseDirector();
          		// 由工程队来修
          		HouseBuilder builder = new PingFangBuilder();
          		// HouseBuilder builder = new GongyuBuilder();
          		director.makeHouse(builder);
          
          		House house = builder.getHouse();
          		System.out.println(house.getFloor());
          		System.out.println(house.getWall());
          		System.out.println(house.getHousetop());
          	}
          
          }
        

    在Main方法中可以看到,在构建对象的时候,客户不需要对数据进行细节操作,只需要创建出工程队和设计者,设计者会将所有操作交给工程队来做,我们只需要一个想要实现的工程队即可,它会给我们创建出相应的对象。

  • 相关阅读:
    设计模式のPrototypePattern(原型模式)----创建模式
    设计模式のBuilderPattern(创建者模式)----创建模式
    设计模式のSingleton Pattern(单例模式)----创建模式
    设计模式のAbstractFactory(虚拟工厂)----创建模式
    设计模式のFactoryPattern(工厂模式)----创建模式
    日文键盘改英文键盘
    [转]CString转char * ,string
    linux下添加PATH环境变量
    Windows异步套接字(WSASocket)
    【转载】va_start和va_end使用详解
  • 原文地址:https://www.cnblogs.com/esileme/p/7566866.html
Copyright © 2011-2022 走看看