代码设计:设计模式:抽象工厂和工厂方法

类结构

工厂方法模式

工厂类

封装多个生产不同产品的实现方法

产品类

封装产品相关的属性和操作

不同的产品封装成不同的产品类

类之间的关系

工厂和产品之间的关系是一对多,一个工厂生产多个产品

抽象工厂模式

工厂相关类
工厂的抽象类/接口

定义生产产品的抽象方法

工厂的具体类

实现生产产品的抽象方法

产品相关类
产品的抽象类/接口

定义产品相关的抽象方法

产品的具体类

实现产品相关的抽象方法

类之间的关系

工厂和产品之间是一对一的关系,一个工厂只生产一个产品

同样是面向接口,MVP与访问者模式,为了实现多对多,而抽象工厂为了实现一对一

小结

抽象工厂可以看作工厂方法的升级,当工厂方法中工厂类过于复杂,可以将其升级为抽象工厂

代码实例

工厂方法模式

工厂类
public class Factory {

      public Product1 createProduct1() {

          return new Product1();
      }
      public Product2 createProduct2() {

          return new Product2();
      }
      public Product3 createProduct3() {

          return new Product3();
      }
      public Product4 createProduct4() {

          return new Product4();
      }
}
产品类
public class Product1 {

    ... ...
}

public class Product2 {

    ... ...
}

public class Product3 {

    ... ...
}

public class Product4 {

    ... ...
}

抽象工厂模式


工厂相关类

public interface Factory {

    Product creaetProduct();
}

public class Factory1 implements Factory {

    public Product creaetProduct() {

        return new Product1();
    }
}

public class Factory2 implements Factory {

    public Product creaetProduct() implements Factory {

        return new Product2();
    }
}

public class Factory3 implements Factory {

    public Product creaetProduct() implements Factory {

        return new Product3();
    }
}

public class Factory4 implements Factory {

    public Product creaetProduct() {

        return new Product4();
    }
}

产品相关类

public interface Product {}

public class Product1 implements Product {}

public class Product2 implements Product {}

public class Product3 implements Product {}

public class Product4 implements Product {}

总结

工厂方法,一个工厂生产多个产品

抽象工厂,一个工厂生产一个产品

​​​​​​​抽象工厂可以看作工厂方法的升级,当工厂方法中工厂类代码过于复杂,可以将其改成为抽象工厂,降低工厂类的代码复杂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值