什么是建造者模式建造者(builder)模式的定义: 指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。
优点1、封装性好,构建和表示分离。
2、扩展性好,各个具体的建造者相互独立,有利于系统的解耦。
3、客户端不必知道产品内部组成的细节,建造者可以对创建过程逐步细化,而不对其它模块产生任何影响,便于控制细节风险。
缺点1、产品的组成部分必须相同,这限制了其使用范围。
2、如果产品的内部变化复杂,如果产品内部发生变化,则建造者也要同步修改,后期维护成本较大。
知识点建造者(builder)模式和工厂模式的关注点不同:建造者模式注重零部件的组装过程,而工厂方法模式更注重零部件的创建过程,但两者可以结合使用。
建造者模式实现案例: 神医豆豆炼丹
产品角色(product):丹药
抽象建造者(builder):抽象丹方
具体建造者(concrete builder):具体丹方
指挥者(director):神医豆豆
神医豆豆炼制九转仙丹和太虚化神丹
注意:为了省事这里说的丹方内容只有丹药名字和效果,并没有材料之类的。
丹药丹药类声明炼丹的名称和效果两个属性
public class dan { /* cailiao 丹药的名称 danhuo 丹药的效果*/ private string name; private string xiaoguo; public string getname() { return name; } public void setname(string name) { this.name = name; } public string getxiaoguo() { return xiaoguo; } public void setxiaoguo(string xiaoguo) { this.xiaoguo = xiaoguo; }}
抽象丹方抽象类,new一个丹药对象,声明两个抽象方法分别是给丹药命名和赋予丹药效果,还有一个生成丹药的方法。
//抽象丹方abstract class danfang { dan dan = new dan(); public abstract void name(); public abstract void xiaoguo(); public dan getdan() { return dan; }}
九转仙丹丹方具体丹方类继承丹方类,并且实现两个抽象方法。
//九转仙丹丹方public class jiuzhuan extends danfang { @override public void name() { dan.setname("九转仙丹"); } @override public void xiaoguo() { dan.setxiaoguo("原地成仙"); }}
太虚化神丹丹方具体丹方类继承丹方类,并且实现两个抽象方法。
//太虚化神丹丹方public class taixu extends danfang { @override public void name() { dan.setname("太虚化神丹"); } @override public void xiaoguo() { dan.setxiaoguo("意念化神"); }}
神医豆豆声明一个丹方属性,一个有参构造方法,一个炼丹方法。
public class doudou { private final danfang danlu; public doudou(danfang danlu) { this.danlu = danlu; } //炼丹方法 public dan lian() { //放入材料 danlu.name(); //释放丹火 danlu.xiaoguo(); //成丹 return danlu.getdan(); }}
测试炼制两个丹药。
public class demo { public static void main(string[] args) { //炼制九转仙丹 //new一个九转仙丹的丹方 danfang jiu = new jiuzhuan(); //把丹方给豆豆 doudou dou = new doudou(jiu); //炼丹生成丹药 dan dan = dou.lian(); system.out.printf("丹药名称:%s 丹药效果:%s", dan.getname(), dan.getxiaoguo()); system.out.println(); //炼制太虚化神丹 //new一个九转仙丹的丹方 danfang tai = new taixu(); //把丹方给豆豆 doudou dous = new doudou(tai); //炼丹生成丹药 dan dans = dous.lian(); system.out.printf("丹药名称:%s 丹药效果:%s", dans.getname(), dans.getxiaoguo()); }}
以上就是分析java中建造者模式的案例的详细内容。