工厂模式+建造者模式(用例说明)(一)

// 直接上代码进行理解
// 用造房子的例子将两种设计模式完美结合~
// 全程大白话~

工厂模式

当你要造屋顶的时候,我们一般不会这样写:

Roof roof = new Roof();

因为屋顶对象的参数太多了,直接new出来非常不方便,而且当我们需要不同材质的屋顶的时候类就非常多,很难管理
于是很自然的,定义一个Roof的接口,不同材质的屋顶实现这个接口:

public interface Roof {
    void buildRoof();
    String getMaterial();
}
public class WoodenRoof implements Roof {
    private String material = "木头";
    @Override
    public void buildRoof() {
        System.out.println("--开始建造木屋顶--");
        System.out.println("1、伐木");
        System.out.println("2、搭建");
        System.out.println("--木屋顶建造完成--");
    }
    @Override
    public String getMaterial() {
        return material;
    }
}

然后创建一个屋顶工厂的接口,所有材料的屋顶继承这个接口:

public class RoofFactory {
    public static Roof getRoof(String material) {
		if("wooden".equals(material)) {
			Roof woodenRoof = new WoodenRoof();
			woodenRoof.buildRoof();
			return woodenRoof;
		}else if("iron".equals(material)) {
			Roof ironRoof = new IronRoof();
			ironRoof.buildRoof();
			return ironRoof;
		}
	}
}

在消费者端这样写:

public class Client {
    public static void main(String[] args) {
    	Roof woodenRoof = RoofFactory().getRoof("wooden");
    }
}

大概画了个图:
在这里插入图片描述
于是当传入一个材质的时候,屋顶工厂就会帮我们创建屋顶对象~
这就是简单工厂模式,也叫静态工厂模式
但是,当我们的材质多了,不仅要新增对应的类,还要改变RoofFactory中的方法,这就违背了开闭原则:对外扩展开启,对内修改关闭!

这时我想起了架构师间口口相传的话:遇事不决加一层
在RoofFactory和WoodenRoof中间加一层,并把RoofFactory接口化
上图:
在这里插入图片描述

public interface RoofFactory {
    Roof getRoof();
}
public class WoodenRoofFactory implements RoofFactory {
    @Override
    public Roof getRoof() {
        Roof woodenRoof = new WoodenRoof();
        woodenRoof.buildRoof();
        return woodenRoof;
    }
}
public class IronRoofFactory implements RoofFactory {
    @Override
    public Roof getRoof() {
        Roof ironRoof = new IronRoof();
        ironRoof.buildRoof();
        return ironRoof;
    }
}

消费者端这样写:

public class Client {
    public static void main(String[] args) {
    	Roof woodenRoof = new WoodenRoofFactory().getRoof();
    	Roof ironRoof = new IronRoofFactory().getRoof();
    }
}

这样,以后如果要加一个GoldenRoof,只需要写一个GoldenRoof实现Roof,再写一个GoldenRoofFactory实现RoofFactory,就可以实现开闭原则~

建造者模式

用户可以在不知道对象构建过程的情况下创建出复杂对象。
就像你只要和厂商说要一栋房子,厂商就会安排施工人员从零开始造一个房子出来给你,这个过程并不需要你参与也不需要你知晓
先上图看结构:
在这里插入图片描述
流程是:消费者告诉包工头自己要房子,包工头告诉工人建造流程,工人按照图纸造出房子
其中,包工头造房子的思路不相同,工人实现具体步骤的方法不相同,所以director和worker都是多对多的关系

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值