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

抽象工厂模式

时间:2018-09-20 11:25:15      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:品种   升级   style   linu   缺点   class   xtend   ati   操作系统   

定义:创建一组相关或相互依赖的对象提供一个接口,并且无须指定他们的具体类。抽象工厂模式是工厂模式的升级版本,当有多个业务品种和业务分类时,通过抽象工厂模式产生需要的对象是一个很好的解决方式。有N个产品族,在抽象工厂类中就应该有N个创建方法。

首先假设有两个互相影响的产品族,比如汽车的左侧门和右侧门,它们数量相等--两个对象的约束,每个型号的车门都是不一样的,这是产品的等级约束,举一个通用代码的例子:

public abstract class AbstractProduct{
    //每个产品公有的方法
    public void shareMethod(){}
    //每个产品相同方法 不同实现
    public abstract void doSomething();
}
//A1实现类
public class ProductA1 extends AbstractProduct{
    public void doSomething(){
        System.out.print("a");
    }
}
//A2实现类
public class ProductA2 extends AbstractProduct{
    public void doSomething(){
        System.out.print("b");
    }
}
//抽象工厂类 有几个产品族就要有几个创建方法
public abstract class AbstractCreactor{
    //创建A产品家族
    public abstract AbstractProduct createProductA();
    //创建B产品族
    public abstract AbstractProduct createProductB();
}
//产品等级1的实现类
public class Creactor1 extends AbstractCreator{
    public AbstractProductA createProductA(){
        return new ProductA1();
    }
    public AbstractProductB createProductB(){
        return new ProductB1();
    }
}
//产品等级2的实现类
public class Creator2 extends AbstractCreator {
    //只生产产品等级为2的A产品
    public AbstractProductA createProductA() {
        return new ProductA2();
    }
    //只生产产品等级为2的B产品
    public AbstractProductB createProductB() {
        return new ProductB2();
    }
}
//场景类
public class Client{
    public static void main(String[] args){
        //定义两个工厂
        AbstractCreactor creactor1 = new Creactor();
        AbstractCreactor creactor2 = new Creactor();
        //产生A1对象
        AbstractProductA a1 = creator1.createProductA();
        //产生A2对象
        AbstractProductA a2 = creator2.createProductA();
        //产生B1对象
        AbstractProductB b1 = creator1.createProductB();
        //产生B2对象
        AbstractProductB b2 = creator2.createProductB();  
     }
}

抽象工厂模式的优缺点:

优点:

  • 封装性,产品类的实现类不需要高层模块关心,只需要关心抽象类和接口,只要知道工厂类是哪个,就可以创建需要的对象
  • 产品族类的约束为非公开状态。具体的产品族约束在工厂内实现,高层模块调用不需要关心。

缺点:

  • 最大缺点是产品扩展类非常困难

应用场景:

比较简单,在一个对象族中都有一个相同的约束,比如一个软件实体(文本编辑器等)同时在windows和linux平台开发,功能和界面相同,代码实现层不完全相同,这就是共同的约束:操作系统,这就可以使用抽象工厂模式。

 

抽象工厂模式

标签:品种   升级   style   linu   缺点   class   xtend   ati   操作系统   

原文地址:https://www.cnblogs.com/loveBolin/p/9678495.html

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