zoukankan      html  css  js  c++  java
  • 单一职责-依赖倒转-代理模式-迭代器模式等

    单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。

    开放封闭原则:对于扩展是开放的,对于修改是封闭的。无论模块是多么的"封闭",都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,然而,对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。

    依赖倒转原则:抽象不应该依赖细节,细节应该依赖于抽象,说白了就是要针对接口编程,依赖抽象或接口编程。

    里氏替换原则:只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正的被复用,而子类也能够在父类的基础上增加新的行为。
    里氏替换原则:父类引用指向子类对象Person p=new Chinese();(隐式类型转换)
    里氏替换原则:定义一个方法的时候,返回类型是父类型,而实际返回是子类型的对象

    代理模式:为其他对象提供一种代理以控制对这个对象的访问。例:秀才让小六代其求婚。

    迪米特法则(最少知识原则):如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用,强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限。也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开,其根本思想是强调了类之间的松耦合。


    迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。---foreach in
    迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可以让外部代码透明地访问集合内部的数据。


    foreach执行原理
    foreach来循环遍历某类型,这个类型必须实现了IEnumerable接口,实现public IEnumerator GetEnumerator()方法
    GetEnumerator()方法该方法返回IEnumerator类型的对象,此方法不是用来遍历,而是用来得到一个迭代器,这个迭代器才是用于遍历的对象
    foreach循环是只读的,不能用来修改数据
    foreach循环式只进的,并且是一条一条循环的

    #region 自定义迭代器
    MyList list = new MyList() { Name="yzk",Age=18,Height=180};
    //foreach (var item in list)
    //{
    // Console.WriteLine(item);
    //}
    //拆解foreach执行过程:
    IEnumerator e1 = list.GetEnumerator();//foreach list
    if (e1.MoveNext())//in
    {

    var item = e1.Current;//enu.Current;迭代器中的指针,指向当前的元素
    Console.WriteLine(item);

    }
    if (e1.MoveNext())//in enu.MoveNext();完成指针的移动,逐个遍历所有元素,如果后边没有元素,则返回false
    {

    var item = e1.Current;
    Console.WriteLine(item);

    }

    if (e1.MoveNext())//in
    {

    var item = e1.Current;
    Console.WriteLine(item);

    }
    if (!e1.MoveNext())//这时已经没有项了,所以返回false退出循环
    {

    //break;
    Console.WriteLine("退出迭代器的遍历");

    }
    #endregion

  • 相关阅读:
    A very good site containing a lot of wonderful videos from Microsoft, List_of_GUI_testing_tools,
    java试用(3)awt,UI
    deletion of pointer to incomplete type 'A'; no destructor called
    windbg
    semaphore与Mutex
    Display a Web Page in a Plain C Win32 Applicatio
    java试用(1)hello world
    Linux opensshserver,
    Toggle hardware data/read/execute breakpoints programmatically
    RTThread RTOS
  • 原文地址:https://www.cnblogs.com/xiaoweigogo/p/7793266.html
Copyright © 2011-2022 走看看