勇哥带大家回顾一下面向对象编程和设计模式的精髓概念。
面向对向程序的三大特征:
封装,隐藏内部实现
继承,复用现有代码
多态,改写对象行为
设计模式的核心思想:
(1)设计模式最根本的意图是适应需求的变化。
(2)编码应采用高内聚低耦合设计思想
(3)针对接口编程,而不要针对实现编程
(4)优先使用聚合,而不是继承
(5)坚持开闭原则(OCP)
注:
内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事,它描述的是模块内的功能联系;
耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、
进入或访问一个模块的点以及通过接口的数据。
开闭原则(OCP)是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,
其它很多的设计原则都是实现开闭原则的一种手段。
开闭原则中“开”,是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的;
开闭原则中“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代码。
按上面的思想,勇哥编了一段小程序。
在这个小例子里面用到了:
封装、继承、多态
设计模式思想(1)、(2)、(3)、(5)
/// <summary>
/// 计算方法一的实现: 不打折
/// </summary>
public class m1 : ICal
{
public T Add<T>(T x, T y)
{
dynamic res=(float.Parse(x.ToString()) + float.Parse(y.ToString()));
return (T)res;
}
}
/// <summary>
/// 计算方法二的实现:半价
/// </summary>
public class m2 : ICal
{
public T Add<T>(T x, T y)
{
dynamic res = (float.Parse(x.ToString()) + float.Parse(y.ToString()))*0.5;
return (T)res;
}
}
/// <summary>
/// 计算类
/// </summary>
public class Cal
{
/// <summary>
/// 计算两个商品的总金额
/// </summary>
/// <param name="method">传入计算方法</param>
/// <param name="x">商品一金额</param>
/// <param name="y">商品二金额</param>
/// <returns></returns>
public float Sell(ICal method,float x,float y)
{
return method.Add<float>(x, y);
}
}
/// <summary>
/// 计算方法的接口
/// </summary>
public interface ICal
{
T Add<T>(T x, T y);
}
调用的例子:
private void button1_Click(object sender, EventArgs e)
{
//初始化计算类
Cal f = new Cal();
//初始化两种计算方法类:不打折/半价
m1 method1 = new m1();
m2 method2 = new m2();
MessageBox.Show("不打折:" + f.Sell(method1, 20, 30));
MessageBox.Show("半价:" + f.Sell(method2, 20, 30));
}
上面这个例子中,两个算法类都继承了算法接口ICal。
类Cal的Sell方法可以传入实现了接口ICal的任何一个算法类进行计算。
如果希望有更多的算法,可以再编写新的继承接口ICal的类即可,不需要修改计算类Cal,很好的遵守了开闭原则。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

