zoukankan      html  css  js  c++  java
  • 设计模式三—抽象工厂模式

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

    一、定义

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

    二、原理图

     

    三、代码实例

    * 苹果和土豆是园丁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();
            
    
        }
    
    }

    四、运行结果

    栽种苹果

    苹果正在生长,,,

    收获苹果

    栽种土豆

    土豆正在生长,,,

    收获土豆

    栽种葡萄。

    葡萄正在生长。。。

    收获葡萄。

    栽种西红柿

    西红柿正在生长,,,

    收获西红柿

  • 相关阅读:
    Alpha阶段敏捷冲刺③
    Alpha阶段敏捷冲刺②
    Alpha阶段敏捷冲刺①Scrum 冲刺博客
    201621123031 《Java程序设计》第8周学习总结
    201621123031 《Java程序设计》第7周学习总结
    201621123031 《Java程序设计》第6周学习总结
    201621123031 《Java程序设计》第5周学习总结
    201621123031 《Java程序设计》第4周学习总结
    201621123031 《Java程序设计》第3周学习总结
    201621123031 《Java程序设计》第2周学习总结
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/6892612.html
Copyright © 2011-2022 走看看