zoukankan      html  css  js  c++  java
  • 设计模式(二)抽象工厂模式 狼

    以下所有数据位伪造:O(∩_∩)O哈哈~!!

    业务逻辑:以同一系统适应美国、中国的工资计算方式,计算公式是:到手的工资=基本工资+奖金-税收;

    如中国的工资计算是 到手的工资=基本工资+奖金-税收;

    税收=基本工资*5%;奖金=企业自己的计算方式

       美国的工作计算是:税收=(基本工资*10%+奖金)*25%;奖金=美国企业自己的计算方式;

    所有虽然工资计算的总公式相同(到手的工资=基本工资+奖金-税收),但具体的工资计算方式却不同。所以总公式就可以抽象。

    系统代码逻辑解释:

    一:Constant负责提供所有的基本数据。这里只是基本工资和具体反射那个类。2个税收的比例计算为多余,暂时不用。

    二:抽象工厂负责抽象高级的业务逻辑。为具体工厂提供抽象方法和具体要创建那个工厂。

    三:具体工厂实现,抽象工厂中的2二个抽象类。该工厂负责实例化,返回具体的奖金计算类、和税收计算类。

    四:具体的税收计算类,负责计算方法,计算完成后返回一个结果。

    五:接口的定义,抽象了的税收计算和奖金计算方式,实现统一的接口暴露给客户端。。因为工厂返回具体的类,类的方法返回具体的计算类。而计算类有统一遵循了相同的接口。所以可以端的调用不变。

    六:client客户端调用类。

    七:抽象工厂,中有2个抽象方法 分别是creatBons(计算奖金)、CreateTax(计算税收);一个工厂方法,根据配置文件,用反射来,来实现具体实例化那一个类。

    然后具体的工厂,实现creatBons(计算奖金)、CreateTax(计算税收)的接口,这二个接口实例化返回一个具体的税收计算方法和奖金计算方法。

    在客户端Cliet直接调用抽象工厂:     IBons bons = AbstractFactory.GetInstance().CreatBons();ITax tax = AbstractFactory.GetInstance().CreatTax();

    因为抽象工厂返回的是一个具体的工厂类,并且该类下的CreatBons、和CreatTax都实现了接口Ibons、和ITax、所以可以直接调用该方法。就可以直接计算奖金和税收了。

  • 相关阅读:
    [LeetCode] 394. Decode String 解码字符串
    [LeetCode] 393. UTF-8 Validation 编码验证
    [LeetCode] Is Subsequence 是子序列
    [LintCode] Maximum Gap 求最大间距
    [LintCode] Nuts & Bolts Problem 螺栓螺母问题
    [LintCode] Kth Smallest Number in Sorted Matrix 有序矩阵中第K小的数字
    [LeetCode] Perfect Rectangle 完美矩形
    LaTex Remove Left Margin 去除左边空间
    LaTex Font Size 字体大小命令
    [LintCode] Continuous Subarray Sum 连续子数组之和
  • 原文地址:https://www.cnblogs.com/gowhy/p/2000550.html
Copyright © 2011-2022 走看看