码迷,mamicode.com
首页 > 编程语言 > 详细

Java设计模式(3)——抽象工厂模式

时间:2018-02-03 23:07:09      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:one   职责   rgs   extends   nan   bst   sys   设计   img   

  抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。

一、产品族和产品等级结构

  为了方便引进抽象工厂模式,特地引进一个新的概念:产品族(Product Family)。所谓产品族,是指位于不同产品等级结构中,功能相关联的产品组成的家族。每一个产品族中含有产品的数目,与产品等级结构的数目是相等的。产品的等级结构和产品族将产品按照不同方向划分,形成一个二维的坐标系。即相图:

技术分享图片

  在上面的相图中加入了具体工厂角色。可以看出,对应于每一个产品族都有一个具体的工厂。而每一个工厂负责创建属于同一个产品族,但是分属不同的等级机构的产品。

二、模式中包含的角色及其职责

1.抽象工厂(Creator)角色
  抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。
2.具体工厂( Concrete Creator)角色
  具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。
3.抽象(Product)角色
  抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
4.具体产品(Concrete Product)角色
  抽象模式所创建的具体实例对象
总结:抽象工厂中方法对应产品结构,具体工厂对应产品族。

三、Demo

抽象角色

产品结构(Apple、Banana)

public interface Fruit {
    /*
     * 采集
     */
    public void get();
}
public abstract class Apple implements Fruit{
    /*
     * 采集
     */
    public abstract void get();
}
public abstract class Banana implements Fruit{
    /*
     * 采集
     */
    public abstract void get();
}

具体产品角色

产品族(北方水果)

public class NorthApple extends Apple {

    public void get() {
        System.out.println("采集北方苹果");
    }

}
public class NorthBanana extends Banana {

    public void get() {
        System.out.println("采集北方香蕉");
    }

}

产品族(南方水果)

public class SouthApple extends Apple {

    public void get() {
        System.out.println("采集南方苹果");
    }

}
public class SouthBanana extends Banana {

    public void get() {
        System.out.println("采集南方香蕉");
    }

}

抽象工厂角色

public interface FruitFactory {
    //实例化Apple
    public Fruit getApple();
    //实例化Banana
    public Fruit getBanana();
}

具体工厂角色

public class NorthFruitFactory implements FruitFactory {

    public Fruit getApple() {
        return new NorthApple();
    }

    public Fruit getBanana() {
        return new NorthBanana();
    }

}
public class SouthFruitFactory implements FruitFactory {

    public Fruit getApple() {
        return new SouthApple();
    }

    public Fruit getBanana() {
        return new SouthBanana();
    }

}

测试类

技术分享图片
public class MainClass {
    public static void main(String[] args) {
        FruitFactory ff = new NorthFruitFactory();
        Fruit apple = ff.getApple();
        apple.get();
        
        Fruit banana = ff.getBanana();
        banana.get();
        
        FruitFactory ff2= new SouthFruitFactory();
        Fruit apple2 = ff2.getApple();
        apple2.get();
        
        Fruit banana2 = ff2.getBanana();
        banana2.get();
        
    }
}
View Code

控制台输出

采集北方苹果
采集北方香蕉
采集南方苹果
采集南方香蕉

四、UML类图

技术分享图片

Java设计模式(3)——抽象工厂模式

标签:one   职责   rgs   extends   nan   bst   sys   设计   img   

原文地址:https://www.cnblogs.com/realshijing/p/8410877.html

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