修炼Java开发技术,学习笔记:对比建造者模式和抽象工厂模式

总的来说,虽然同为创建类设计模式,建造者模式比抽象工厂模式多了一个设计者的角色,用于创建复杂产品。适用于产品中属性顺序不同,产生的产品截然不同的情况。下面,首先从较简单的抽象工厂模式开始解释:

1. 抽象工厂模式

  1. 抽象产品接口;
  2. 具体产品类;
  3. 抽象工厂接口;
  4. 具体工厂类;
  5. 客户端;

注意理解产品族和产品等级(结构)的关系,抽象工厂模式就是为了根据客户的指令,创建一个产品族(相互之间有关联或者依赖关系)的产品,不会发生同一个产品族中存在别族产品的情况。

//1. 抽象产品接口
public interface A(){
    //产品属性和方法
}
public interface B(){
    //产品属性和方法
}

//2. 具体产品类,实现抽象产品接口,通常不止一种产品;
public class ProductA implements A{
    //具体产品的属性和方法,除了实现抽象产品的接口,还可以有自己的特有属性和方法
}
public class ProductB implements B{
    //具体产品的属性和方法,除了实现抽象产品的接口,还可以有自己的特有属性和方法
}

//3. 抽象工厂接口,为何要有这个抽象工厂接口呢?
//为了将不同的产品匹配起来,这个接口中所定义的方法不是随意堆砌的,是一系列相关或者相互依赖的方法!
public interface AbstractFac{
    public ProductA createA();
    public ProductB createB();
}

//4. 具体工厂类,具体实现匹配的各产品
public class FacA implements AbstractFac{
    //具体实现抽象工厂中的方法
}

//5. 客户端或者加入一个工程师角色

2. 建造者模式

而对于建造者模式,突出的是建造者的角色
1. 产品类(抽象然后实现或者直接实现都可以);
2. 抽象工厂接口;
3. 具体工厂;
4. 建造者角色(一样的产品类,其中属性的顺序或者方法的顺序不同,产生的效果不同;那么就需要使用一个设计建造者的角色去体现);
5. 客户端

//1. 产品类,通常是复杂对象
public class Product{
    //有不止一个属性或者方法;颠倒执行顺序,效果不同;
}

//2. 抽象工厂接口
public interface AbstractFac{
    //...
}

//3. 具体工厂类
public class Fac implements AbstractFac{
    //返回一个实现了的产品对象;
}

//4. 建造者
public class Designer{
    public Design(){}
    public void design(AbstractFac af){
        af.methodA();
        //设计不同的顺序,产生不同的效果
    }
}  

public class Client{
    public static void main(String[] args){
        Fac fac = new Fac();
        Designer designer = new Disigner();
        designer.design(fac);
        Product product = fac.getProduct();
        //...使用product
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值