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

    一、什么是抽象工厂模式

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

    Fruit接口

    public interface Fruit {
        /*
         * 采集
         */
        public void get();
    }

    Apple抽象类

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

    Banana抽象类

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

    FruitFactory工厂类

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

    NorthFruitFactory南方工厂

    public class NorthFruitFactory implements FruitFactory {
    
        public Fruit getApple() {
            return new NorthApple();
        }
    
        public Fruit getBanana() {
            return new NorthBanana();
        }
    
    }

    SouthFruitFactory工厂类

    public class SouthFruitFactory implements FruitFactory {
    
        public Fruit getApple() {
            return new SouthApple();
        }
    
        public Fruit getBanana() {
            return new SouthBanana();
        }
    
    }

    NorthApple北方苹果类

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

    NorthBanana北方香蕉

    public class NorthBanana extends Banana {
    
        public void get() {
            System.out.println("采集北方香蕉");
        }
    
    }
    SouthApple 南方苹果
    public class SouthApple extends Apple {
    
        public void get() {
            System.out.println("采集南方苹果");
        }
    
    }
    SouthBanana 南方香蕉
    public class SouthBanana extends Banana {
    
        public void get() {
            System.out.println("采集南方香蕉");
        }
    
    }

    如果我们增加一个新的温室系列产品则只需要新增

    WenshiFruitFactory 温室工厂
    public class WenshiFruitFactory implements FruitFactory {
    
        public Fruit getApple() {
            return new WenshiApple();
        }
    
        public Fruit getBanana() {
            return new WenshiBanana();
        }
    
    }
    WenshiApple 温室苹果
    public class WenshiApple extends Apple {
    
        public void get() {
            System.out.println("采集温室苹果");
        }
    
    }
    WenshiBanana 温室香蕉
    public class WenshiBanana extends Banana {
    
        public void get() {
            System.out.println("采集温室香蕉");
        }
    
    }

    测试类mainclass

    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();
            
            FruitFactory ff3 = new WenshiFruitFactory();
            Fruit apple3 = ff3.getApple();
            apple3.get();
            
            Fruit banana3 = ff3.getBanana();
            banana3.get();
        }
    }

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

    1.抽象工厂(Creator)角色
    抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。

    2.具体工厂( Concrete  Creator)角色
    具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。

    3.抽象(Product)角色
    抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

    4.具体产品(Concrete Product)角色
    抽象模式所创建的具体实例对象
    总结:抽象工厂中方法对应产品结构,具体工厂对应产品族。

  • 相关阅读:
    【Language】 TIOBE Programming Community Index for February 2013
    【diary】good health, good code
    【web】a little bug of cnblog
    【Git】git bush 常用命令
    【web】Baidu zone ,let the world know you
    【diary】help others ,help yourself ,coding is happiness
    【Git】Chinese messy code in widows git log
    【windows】add some font into computer
    SqlServer启动参数配置
    关于sqlserver中xml数据的操作
  • 原文地址:https://www.cnblogs.com/LT0314/p/3894464.html
Copyright © 2011-2022 走看看