IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 设计模式:建造者模式 -> 正文阅读

[Java知识库]设计模式:建造者模式

④建造者模式(Builder Pattern)

简介:

? 建造者模式使用多个简单的对象来构建一个复杂的对象。属于建造者模式。

实现方法:

  1. 创建一个零件类组装接口。
  2. 创建多个不同抽象类,与其实现类。
  3. 调用零件类组装接口中方法对步骤2中多个实现类进行组装,创建出多种不同的实例。

优点:

  1. 建造者独立,灵活性高,容易扩展。
  2. 对于全局与细节的控制性较强。

缺点:

  1. 生成的产品必须有共同点,生产范围受限。

  2. 若内部出现复杂变化,建造类的扩展规模较大。

使用场景

  1. 系统需要的对象具有复杂的内部结构。
  2. 需要的对象内部属性本身相互依赖。

特点:

  • 基本部件不变,组合经常发生改变。
  • 代码规模较大型。

图形实现:

请添加图片描述

代码实现:

Collocation.java:

public interface Collocation {
    String name();
    Color selectColor();
    float price();
}

Color.java:

public interface Color {
        String color();
}

Blue.java:

public class Blue implements Color{
        @Override
        public String color() {
            return "Blue";
        }
}

Black.java:

public class Black implements Color{
    @Override
    public String color() {
        return "black";
    }
}

Tee.java:

public abstract class Tee implements Collocation{
    @Override
    public Color selectColor() {
        return new Blue();
    }

    @Override
    public abstract float price();
}

Pants.java:

public abstract class Pants implements Collocation{
    @Override
    public Color selectColor() {
        return new Black();
    }

    @Override
    public abstract float price();
}

HLA.java:

public class HLA extends Tee{
    @Override
    public float price() {
        return 325.0f;
    }

    @Override
    public String name() {
        return "HLA";
    }
}

LV.java:

public class LV extends Tee{
    @Override
    public float price() {
        return 3250.0f;
    }

    @Override
    public String name() {
        return "LV";
    }
}

LEVIS.java:

public class LEVIS extends Pants{    
	@Override    
	public float price() {       
		return 525.0f;    
	}    
	@Override    
	public String name() {        
		return "LEVIS";    
	}
}

GXG.java:

public class GXG extends Pants{    
	@Override    
	public float price() {        
		return 125.0f;    
	}    
	@Override    
	public String name() {        
		return "GXG";    
	}
}

Clothes.java:

public class Clothes {    
private List<Collocation> collocations= new ArrayList<Collocation>();    
	public void addCollocation(Collocation collocation) {        
		collocations.add(collocation);    
	}   
	public float getCost() {        
		float cost = 0.0f;        
		for (Collocation collocation: collocations) {            
			cost += collocation.price();        
		}        
		return cost;    
	}    
	public void showCollocations() {        
		for (Collocation collocation: collocations) {            
		System.out.print("collocation: " + collocation.name());            
		System.out.print(", SelectColor : " + collocation.selectColor().color());            
		System.out.println(", Price : " + collocation.price());        
		}    
	}
}

ClothesBuilder.java:

public class ClothesBuilder {    
	public Clothes prepareNo1 (){        
		Clothes clothes = new Clothes();        
		clothes.addCollocation(new HLA());        
		clothes.addCollocation(new LEVIS());        
		return clothes;    
	}    
	public Clothes prepareNo2 (){        
		Clothes clothes = new Clothes();        
		clothes.addCollocation(new LV());        
		clothes.addCollocation(new GXG());        
		return clothes;    
	}
}

BuilderPatternDemo.java:

public class BuilderPatternDemo {    
	public static void main(String[] args) {        
		ClothesBuilder clothesBuilder = new ClothesBuilder();        
		Clothes No1 = clothesBuilder.prepareNo1();        
		System.out.println("No1");        
		No1.showCollocations();        
		System.out.println("Total Cost: " + No1.getCost());        
		System.out.println("--------------------");        
		Clothes No2 = clothesBuilder.prepareNo2();        
		System.out.println("No2");        
		No2.showCollocations();        
		System.out.println("Total Cost: " + No2.getCost());    
	}
}

主线程main()执行结果:

No1
Collocation : HLA, SelectColor : Blue, Price : 325.0
collocation: LEVIS, SelectColor : black, Price : 525.0
Total Cost: 850.0
--------------------
No2
Collocation : LV, SelectColor : Blue, Price : 3250.0
collocation: GXG, SelectColor : black, Price : 125.0
Total Cost: 3375.0
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-01 11:47:38  更:2021-09-01 11:48:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:05:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码