码迷,mamicode.com
首页 > 其他好文 > 详细

三、抽象工厂模式

时间:2020-06-22 15:14:41      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:ade   ctc   create   模式   public   image   plain   eth   rod   

设计模式

三、抽象工厂模式

主要解决:简单工厂升级版,适合产品有多于一个的产品族,而系统只消费其中某一族的产品。

优点:

  1. 多个产品一起工作,可以使用同一产品对象

  2. 易于对产品横向升级

缺点:产品族难扩展,需要修改抽象工厂及其实现

UML类图

技术图片

实现:

*注:抽象产品工厂模式不利于产品的纵向增加,例如增加productC,需要修改工厂抽象类以及其实现;方便产品的横向升级,例如增加 3类 AB产品,只需要增加3类产品类,实现抽象工厂接口即可

// 工厂抽象类 用于创建产品组里所有产品  *不易于扩展其他产品
public interface AbstractFactory {
   Product createProductA();
   Product createProductB();
}
// 产品抽象类 约定产品公用属性以及方法
public interface Product {
    void doSomething();
}
/**
 * 产品创造工厂
 * 此处实验约定 产品工厂1 生产类型1的 A、B 产品
 *  产品工厂2 生产类型2的 A、B 产品
 */
// 产品工厂1
public class Product1Factory implements AbstractFactory {
    @Override
    public Product createProductA() {
        return new ProductA_1();
    }
    @Override
    public Product createProductB() {
        return new ProductB_1();
    }
}
// 产品工厂2
public class Product2Factory implements AbstractFactory {
    @Override
    public Product createProductA() {
        return new ProductA_2();
    }
    @Override
    public Product createProductB() {
        return new ProductB_2();
    }
}
// A产品抽象类类 这里也可直接实现产品接口,实现具体产品
public abstract class ProductA implements Product {
    public abstract void doSomething();
}
?
// 1类 A产品
public class ProductA_1 extends ProductA {
    @Override
    public void doSomething() {
        System.out.println("ProductA_1");
    }
}
?
// 2类 A产品
public class ProductA_2 extends ProductA {
    @Override
    public void doSomething() {
        System.out.println("ProductA_2");
    }
}
// B产品抽象类类
public abstract class ProductB implements Product {
    public abstract void doSomething();
}
?
// 1类 B产品
public class ProductB_1 extends ProductB {
    @Override
    public void doSomething() {
        System.out.println("ProductB_1");
    }
}
?
// 2类 B产品
public class ProductB_2 extends ProductB {
    @Override
    public void doSomething() {
        System.out.println("ProductB_2");
    }
}

 

三、抽象工厂模式

标签:ade   ctc   create   模式   public   image   plain   eth   rod   

原文地址:https://www.cnblogs.com/Ddsl/p/13176640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!