C#面向对象设计模式纵横谈(1):面向对象设计模式与原则

<设计模式:可复用面向对象软件的基础>GoF 23种设计模式

从编程语言直观了解面向对象
 面向对象3大机制
  封装,隐藏内部实现
  继承,复用现有代码
  多态,改写对象行为
例子

结构化做法
1。获得人事系统中所有可能的员工类型
2。根据不同的员工类型所对应的不同的薪金制度,计算其工资
enum EmployeeType{Engineer;Sales;Manager;…}  // 计算工资程序
If ( type==EmployeeType.Engineer)
 {
……
 }
else if (type== Employeetype.Sales)
  {
……
  }

面向对象

1。根据不同的员工类型设计不同的类,并使这些类继承自一个
Employee抽象类,其中有一个抽象方法GetSalary。
2。在各个不同的员工类中,根据自己的薪金制度,重写(override)
GetSalary方法。
abstract class Employee
  {
    …
     public abstract int GetSalary();
   }

class Engineer: Employee
   {
       …
       public override int GetSalary()
          {
            ……
          }
    }

class Sales: Employee
    {
        …
         public override int GetSalary()
           {
             ……
    }
}

// 显示工资程序
Employee e=emFactory.GetEmployee(id);
MessageBox.Show( e.GetSalary());

从宏观层面来看 面向对象的构建方式更能适应软件的变化,能将变化所带来的
影响减为最小

从微观层面来看 面向对象的方式更强调各个类的“责任”

对象是什么?
从概念层面讲,对象是某种拥有责任的抽象。
从规格层面讲,对象是一系统可以被其他对象使用的公共接口。
从语言实现层面,对象封装了代码和数据。

怎么才能设计好的面向对象?
遵循一定的面向对象设计原则。
熟悉一些典型的面向对象设计模式。

从设计原则到设计模式
1针对接口编程而不是针对实现编程

2优先使用对象组合,而不是类继承
类继承通常为“白箱复用”,对象组合通常为“黑箱复用”。继承在某种程度
上破坏了封装性,子类父类耦合度高;而对象组合则只要求被组合的对
象具有良好定义的接口,耦合度低。

3封装变化点
使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行
修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。

4使用重构得到模式
设计模式的应用不宜先入为主,一上来就使用
设计模式是对设计模式的最大误用。没有一步到位的设计模式。敏捷
软件开发实践提倡的“Refactoring to Patterns”是目前普遍公认的最好
的使用设计模式的方法。

几条具体的设计原则
单一职责原则(SRP)
一个类应该仅有一个引起它变化的原因。

开放封闭原则(OCP)
软件实体(类,模块,函数)应该是可以扩展的,但是不可修改的(对扩展开放,对更改封闭)

Liskov替换原则(LSP)
子类必须能够替换它们的基类

依赖倒置原则 (DIP)
高层模块不应该依赖于低层模块,二者都应该依赖于抽象。
抽象不应该依赖于实现细节,实现细节应该依赖于抽象。

接口隔离原则(ISP)
不应该强迫客户程序依赖于它们不用的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值