面向对象的好处
通过活字印刷的例子,来说明面向对象的好处。
- 可维护: 要改,只需要改要改之字,其他的不用动;
- 可复用: 这些字并非用完这次就无用,完全可以在后来的印刷中重复使用;
- 可扩展: 若是要加字,只需要另刻字加入即可;
- 灵活性好: 字的排列可能是竖排,也可能是横排,此时只需要将活字移动就可以满足需求;
-
通过封装、继承、多态把程序的耦合度降低;
-
用设计模式使得程序更加的灵活,容易修改,并且易于复用
计算器的例子
简单工厂模式,用一个单独的类来进行这个创造实例的过程,这就是工厂。将运算符号输入工厂,得到对应的运算子类,通过多态,直接使用父类的getResult方法实际上是子类的getResult方法。
简单工厂- 封装:基类用来对业务进行封装,比如运算类Operation
///Operation运算类
public class Operation
{
public double NumberA { get; set; }
public double NumberB { get; set; }
public virtual double GetResult()
{
double result = 0;
return result;
}
}
- 继承:派生类实现各种具体业务场景,比如加、减、乘、除各种具体的运算
///加减乘除类
///加法类
public class OperationAdd : Operation
{
public override double GetResult()
{
double result = 0;
result = this.NumberA + this.NumberB;
return result;
}
}
///减法类
public class OperationSub : Operation
{
public override double GetResult()
{
double result = 0;
result = this.NumberA - this.NumberB;
return result;
}
}
/// <summary>
/// 乘法类
/// </summary>
public class OperationMul : Operation
{
public override double GetResult()
{
double result = 0;
result = this.NumberA * this.NumberB;
return result;
}
}
/// <summary>
/// 除法类
/// </summary>
public class OperationDiv : Operation
{
public override double GetResult()
{
double result = 0;
if (this.NumberB == 0)
{
throw new Exception("除数不能为0。");
}
result = this.NumberA / this.NumberB;
return result;
}
}
- 多态:简单工厂类,根据条件,创建符合条件的派生类。比如这里用+-*/的字符代表加减乘除等派生类。
///简单工厂类
public class OperationFactory
{
public static Operation CreateOperate(string operate)
{
Operation Oper = null;
switch (operate)
{
case"+":
Oper = new OperationAdd();
break;
case"-":
Oper = new OperationSub();
break;
case"*":
Oper = new OperationMul();
break;
case"/":
Oper = new OperationDiv();
break;
}
return Oper;
}
}
简单工厂是一种派生类实例集中创建的方法。这是一个非常体现面向对象封装、继承、多态等特性的例子。
UML 类图
UML例子-
继承: 空心三角形+实线;箭头指向为被继承的,也就是父类;
实现接口: 空心三角形和虚线;箭头指向为被实现的,也就是接口;
-
关联: 实线剪头;一般作为属性成员,箭头指向属性;
依赖: 虚线箭头;一般作为方法的参数,箭头指向参数;
-
聚合: 空心的菱形加箭头;群体和个体的关系;菱形指向群体;箭头指向个体;群体中包含一个数组,数组成员是个体
组合: 实心的菱形加箭头;整体和部分的关系;菱形指向整体;箭头指向部分;部分作为整体的一个属性成员,并且在构造函数中同时构造;
image.png单向关联用箭头,双向不用。
Demo
这是用Android写的大话设计模式里面的例子
https://gitee.com/zhangxusong888/Android/tree/master/design_pattern
网友评论