设计模式三—抽象工厂模式

Posted 范仁义

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式三—抽象工厂模式相关的知识,希望对你有一定的参考价值。

设计模式三—抽象工厂模式

一、定义

抽象工厂模式是工厂方法模式的进一步抽象。如果产品簇中只有一种产品,则退化为工厂方法模式。

 

二、原理图

 

 

三、代码实例

* 苹果和土豆是园丁1的杰作

* 葡萄和西红柿是园丁2的杰作

1、Fruit.java

public interface Fruit {
	/*
	 * 生长
	 * 收获
	 * 栽种
	 */
	public void grow();
	public void harvest();
	public void plant();
}

  

2、Apple.java

public class Apple implements Fruit {

    private int treeAge;
    
    public void grow() {
        System.out.println("苹果正在生长,,,");
    }

    
    public void harvest() {
        System.out.println("收获苹果");
    }

    
    public void plant() {
        System.out.println("栽种苹果");
    }


    public int getTreeAge() {
        return treeAge;
    }


    public void setTreeAge(int treeAge) {
        this.treeAge = treeAge;
    }
    
    

}

 

3、Grape.java

public class Grape implements Fruit {
    private boolean seedless;
    
    public void grow() {
        System.out.println("葡萄正在生长。。。");
    }

    public void harvest() {
        System.out.println("收获葡萄。");
    }

    public void plant() {
        System.out.println("栽种葡萄。");
    }

    public boolean isSeedless() {
        return seedless;
    }

    public void setSeedless(boolean seedless) {
        this.seedless = seedless;
    }
    
    

}

 

4、Vegetable.java

public interface Vegetable {
    /*
     * 生长
     * 收获
     * 栽种
     */
    public void grow();
    public void harvest();
    public void plant();
}

 

5、Potato.java

public class Potato implements Vegetable {

    public void grow() {
        System.out.println("土豆正在生长,,,");
    }

    
    public void harvest() {
        System.out.println("收获土豆");
    }

    
    public void plant() {
        System.out.println("栽种土豆");
    }

}

 

6、Tomato.java

public class Tomato implements Vegetable {

    public void grow() {
        System.out.println("西红柿正在生长,,,");
    }

    
    public void harvest() {
        System.out.println("收获西红柿");
    }

    
    public void plant() {
        System.out.println("栽种西红柿");
    }

}

 

7、Gardener.java

public interface Gardener {
    /*
     * 水果园丁
     * 蔬菜园丁
     * 水果蔬菜各两种
     * 建立水果工厂的方法
     */
    
    public Fruit factoryFruit();
    public Vegetable factoryVegetable();
    
    
}

 

8、ConcreteGardener1.java

public class ConcreteGardener11 implements Gardener {

    //等级为1的园丁生产的水果和蔬菜
    /*
     * 苹果和土豆是园丁1的杰作,或者说是一等产品
     * 葡萄和西红柿是园丁2的杰作,或者说是二等产品
     */
    public Fruit factoryFruit() {
        return new Apple();
    }

    public Vegetable factoryVegetable() {
        return new Potato();
    }

}

 

9、ConcreteGardener2.java

public class ConcreteGardener12 implements Gardener {

    //等级为2的园丁生产的水果和蔬菜
    /*
     * 苹果和土豆是园丁1的杰作,或者说是一等产品
     * 葡萄和西红柿是园丁2的杰作,或者说是二等产品
     */
    public Fruit factoryFruit() {
        return new Grape();
    }

    public Vegetable factoryVegetable() {
        return new Tomato();
    }

}

 

10、ClientDemo

public class ClientDemo {

    public static void main(String[] args) {
    
        /*
         * 苹果和土豆是园丁1的杰作,或者说是一等产品
         * 葡萄和西红柿是园丁2的杰作,或者说是二等产品
         */
        Gardener gardener1=new ConcreteGardener11();
        Gardener gardener2=new ConcreteGardener12();
        Fruit apple = gardener1.factoryFruit();
        Vegetable potato=gardener1.factoryVegetable();
        Fruit grape = gardener2.factoryFruit();
        Vegetable tomato=gardener2.factoryVegetable();
        
        apple.plant();
        apple.grow();
        apple.harvest();
        potato.plant();
        potato.grow();
        potato.harvest();
        grape.plant();
        grape.grow();
        grape.harvest();
        tomato.plant();
        tomato.grow();
        tomato.harvest();
        

    }

}

 

 

四、运行结果

栽种苹果

苹果正在生长,,,

收获苹果

栽种土豆

土豆正在生长,,,

收获土豆

栽种葡萄。

葡萄正在生长。。。

收获葡萄。

栽种西红柿

西红柿正在生长,,,

收获西红柿

 

以上是关于设计模式三—抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式抽象工厂模式 ( 简介 | 适用场景 | 优缺点 | 产品等级结构和产品族 | 代码示例 )

抽象工厂模式

深入理解设计模式-抽象工厂模式

深入理解设计模式-抽象工厂模式

抽象工厂模式

工厂模式:简单工厂工厂方法抽象工厂