设计模式-生成器模式

1.问题描述

 

生活场景:你玩过种地、种花等类似的游戏吗?这是最近很流行的游戏哟!下面就是从种花游戏中剪切的四个花盆(盆景),很漂亮吧!你将不同的种子放入花盆,一段时间后你就可以看到各种美丽的鲜花了,不同种子所生产出来的鲜花有不同的花朵、叶子和枝茎。编码该如何实现呢?




设计目标:将种子放入花盆,一段时间后就可以收获美丽的鲜花! 

2.不假思索的思路:将盆景看做一个类,有几个盆景我new几个对象,直接完成这一奇妙过程。

 

设计类图:



/**
 * 荷花盆景
 */
public class WaterlilyFlowerpot {
    public String name;
    //茎
    public String stem;
    //叶
    public String leaf;
    //花
    public String flower;

    public  void grow(){

        //说明种类
        name = "荷花";
        
        //生产茎
        stem = "40厘米";
        
        //生产叶子
        leaf = "圆形";

        //生产花
        flower = "白里透红";
        
    }
    public void create(){
        System.out.println(name + " : 茎"+" - "+stem+" , 叶"+" - "+leaf+" , 花"+" - "+flower);
    }
}

/**
 * 玫瑰盆景
 */
public class RoseFlowerpot {
    public String name;
    //茎
    public String stem;
    //叶
    public String leaf;
    //花
    public String flower;

    public  void grow(){

        //说明种类
        name = "玫瑰";
        
        //生产茎
        stem = "20厘米";
        
        //生产叶子
        leaf = "椭圆形";

        //生产花
        flower = "大红大白";
        
    }
    public void create(){
        System.out.println(name + " : 茎"+" - "+stem+" , 叶"+" - "+leaf+" , 花"+" - "+flower);
    }
}
/**
 * 场景类
 */
public class Client {
    public static void main(String[] args){
        //开始种玫瑰花
        RoseFlowerpot rfp = new RoseFlowerpot();
        rfp.grow();
        //盛开
        rfp.create();
        //玫瑰 : 茎 - 20厘米 , 叶 - 椭圆形 , 花 - 大红大白 半径5厘米
        
        //开始种荷花
        WaterlilyFlowerpot wf = new WaterlilyFlowerpot();
        wf.grow();
        //盛开
        wf.create();
        //荷花 : 茎 - 40厘米 , 叶 - 圆形 , 花 - 白里透红 半径10厘米
    }
}


缺点:

      耦合性强,并且有大量代码是重复的。如果想对叶子做一些修改,茎和花的代码也要跟着重写。在这个例子中你可能觉得写一写茎和花的也不费什么事,可真要是想写出像图片中那么漂亮的鲜花的话,每一部分的代码都是很多的,并且这些代码都放在在盆景类中,会让盆景这个类显得很臃肿。那么怎么改?


3.归纳阶段:

      耦合性强就要解耦,代码臃肿就要简化和分离。我们需要将盆景这个复杂的类分解成相对简单的类,比如将花盆和鲜花分离,使得同样的花盆可以生长出不同的鲜花,然后再将鲜花分成几个简单的类,使得某一部分的修改不影响其他部分;这也就是生成器模式。 其定义:Separate the construction of a complex object from its representation so that the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。)

结构类图:




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值