设计模式----(建造者模式)

本文介绍了建造者设计模式,它将复杂对象的构建和表示分离。阐述了该模式的四个角色,包括抽象建造者、具体建造者、指挥者和产品角色。还说明了其使用场景,适用于对象结构复杂、构造与表示分离的情况。最后分析了优缺点。

建造者设计模式的定义

当使用单一方法或者单一的对象来创建会比较繁琐,创建复杂对象发生变化时,系统会面临变化,建造者模式将一个复杂对象的构建和表示分离,使用同样的构建过程创建不同的表示。

建造者模式的四个角色:

  1. .Builder:抽象建造者,声明为创建一个product对象的各个部件特定抽象接口
  2. ConcreteBuilder:具体建造者,实现抽象接口,构建和装配各个软件
  3. Director:指挥者,主要作用是创建一个复杂的对象,其还有两个作用:隔离客户和对象的生产过程;负责控制产品对象的生产过程。
  4. Product:产品角色,一个具体的产品对象

建造者模式的使用场景

  1. 当生成的产品对象内部具有复杂的结构时。
  2. 当复杂对象需要与表示分离,可能需要创建不同的表示。
  3. 需要向客户隐藏内部结构的表现。

综上所述,建造者模式适用于对象结构复杂,对象构造和表示分离的情况,请看如下例子

//首先创造一个套餐类
pbulic class Meal{
    private String food;
    private String drink;
    public String getFood(){
        retrun food;
    }
    pbulic void setFood(String food){
        this.food=food;
    }
    public String getDrink(){
        return drink;
    }
    public void setDrink(String drink){
        this.drink=drink;
    }
}
//创建套餐构造器
public abstract class MealBuilder{

    Meal meal = new Meal();
    
    public abstract void builFood();
    public abstract void builDrink();

    public Meal getMeal(){
        return meal;
    }
}
//创造一个服务员的类
public class Waiter{
    private MealBuilder mealBuilder;
    public void setMealBuilder(MealBuilder mealBuilder){
        this.mealBuilder = mealBuilder;
    }

    public Meal construct(){
        //准备食物
        mealBuilder.buildFood();
        //准备饮品
        mealBuilder.buildDrink();
        //准备完毕,返回一个完整的套餐
        return mealBuilder.getMeal();
    }
}
//实现抽象类
public class MealA extends MealBuilder {
	public void buildDrink() {
		meal.setDrink("一杯饮料!");
	}
	public void buildFood() {
		meal.setFood("一个汉堡!");
	}

}
//抽象类2
public class MealB extends MealBuilder {

	@Override
	public void buildFood() {
		meal.setDrink("一杯果汁");
	}

	@Override
	public void buildDrink() {
		meal.setFood("一个鸡排!");

	}

}
/*
 * 测试类
 * */
public class Text {
	public static void main(String[] args) {
		//服务员
		Waiter waiter = new Waiter();
		//套餐A
		MealA a= new MealA();
		//套餐B
		MealB b = new MealB();
		//服务员准备套餐A
		waiter.setMealBuilder(a);
		//获得套餐
		Meal mealA = waiter.construct();
		
		System.out.println("套餐A的组成部分");
		System.out.println(mealA.getFood()+"---"+mealA.getDrink());
		
	}

}

测试结果:

优缺点

优点:

1.将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,能够控制复杂对象的产生过程;

2.将产品的创建过程与产品本身分离开来,可以使用相同的创建过程来得到不同的产品,细节依赖于抽象;

3.每一个具体建造者相对独立,和其他的建造者无关,方便替换具体建造者或者具体建造者,用户使用不同的创造者得到不同的产品。

缺点:

1.建造者模式创建的产品有较多的相同点组成部分相似,产品件的属性等差异较大时不适合使用建造者模式;

2.产品的内部变化复杂时会导致建造者类实现变化的这个过程。

 

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值