• 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)角色
    抽象模式所创建的具体实例对象
    总结:抽象工厂中方法对应产品结构,具体工厂对应产品族。

  • 相关阅读:
    2019互联网安全城市巡回赛·西安站圆满收官
    跨域漏洞丨JSONP和CORS跨域资源共享
    浅谈URL跳转与Webview安全
    事务嵌套的问题
    小代码编写神器:LINQPad 使用入门
    重构指导之一
    视频的文件格式、压缩格式、码率、分辨率
    Asp.Net中自以为是的Encode
    Solution Explorer 和 Source Control Explorer 的 View History 异同
    借助 Resharper 和 StyleCop 让代码更整洁
  • 原文地址:https://www.cnblogs.com/LT0314/p/3894464.html
Copyright © 2020-2023  润新知