前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Design Patterns 01 - 简单工厂模式

Design Patterns 01 - 简单工厂模式

作者头像
Reck Zhang
发布2021-08-11 10:55:58
1730
发布2021-08-11 10:55:58
举报
文章被收录于专栏:Reck Zhang

简单工厂模式

活字印刷之于面向对象

  • 要改, 只需改要改之字, 此为可维护
  • 活字可以在后来的印刷中重复使用, 此为可复用
  • 若要加字, 只需另刻字, 此为可扩展
  • 只需将活字移动就可满足排列需求, 此为高灵活性

封装

以计算器程序举例, 要将业务逻辑和界面逻辑分离, 使耦合度降低, 才能方便后期的维护和扩展.

代码语言:javascript
复制
public class Operation {
    public static double GetResult(double, double, string) {
        //todo
    }
}
public static void Main(string[] args) {
    Console.Write(GetResult(a, b, op));
}

继承 & 多态

如果要在Operation类中加入sqrt方法, 需要将其他运算都参与编译, 所以应该将各种运算分离.

代码语言:javascript
复制
public class Operation {
    private double _numberA;
    private double _numberB;
    public double NumberA {
        get {
            return _numberA;
        };
        set {
            _numberA = value;
        };
    }
    public double NumberB {
        get {
            return _numberB;
        };
        set {
            _numberB = value;
        };
    }

    public abstract double GetResult();
}
class OperationAdd : Operation {
    public override double GetResult() {
        return NumberA + NumberB;
    }
}

简单工厂模式

通过一个单独的类来创造实例, 这就是工厂.

代码语言:javascript
复制
public class OperationFactory {
    public static Operation CreateOperation(string operator) {
        Operation operation = null;
        switch(operator) {
            case "+" :
                operation = new OperationAdd();
                break;
            default:
                break;
        }
        return operation;
    }
}

public static void Main(string[] args) {
    Operation operation = OperationFactory.CreateOperation("+");
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简单工厂模式
    • 活字印刷之于面向对象
      • 封装
        • 继承 & 多态
          • 简单工厂模式
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档