• 设计模式的核心知识


    终于把23种设计模式给整理完了,通通理解了一遍。虽然看得懂,能够随着里面代码和传递参数的方法绕来绕去,一层一层拔下去而不会“头晕”,但离实际运用它们还是有很大的距离的。

    23种设计模式涵盖了所有软件架构师和设计师前辈们的经验和方法,将最常用的设计方法和模式都“抽取”出来成为精华的核心代码,就像数学里面的公式一样,只要你设计模式会了,会应用了,那么你离设计出没有“臭虫”和高效的代码不远了~

    通过对这些模式的学习和研究,我发现它们还是有一些共同之处的,用到OO里面的三大核心自不必说,同时还很多次用到一个地方:那就是当父类(通常为抽象类)对象A引用子类对象B的时候,然后用A去调用父类中的方法时,这里面有几个地方要注意:当子类中从父类继承而来的虚方法如果采用覆盖(new去修饰)方式时,实际执行的是父类的方法;如果采用重写(override修饰)的方式时,则实际执行的是子类的方法。这个是设计模式的“心脏”,如果不能理解这个原则,则设计模式是看不下去的!同时它也是组建多态的必要核心。因为我们常常要利用抽象类去引用子类来实现多态。

    说了这么多理论,我们来举个例子吧:

    class Program

        {

            static void Main(string[] args)

            {

                A a1 = new B();

                A a2 = new C();

                a1.Methor();

                a2.Methor();

                Console.ReadKey();

            }

        }

        public abstract class A

        {

            public virtual void Methor()

            {

                Console.WriteLine("调用A类中的方法!");

            }

        }

        class B :A

        {

            public override void  Methor()

            {

                Console.WriteLine("调用B类中的方法!");

            }

        }

        class C : A

        {

            public new void Methor()

            {

                Console.WriteLine("调用C类中的方法!");

            }

        }

    执行的结果是:

    调用B类中的方法!

    调用A类中的方法!

    从程序中一看就很明了了!

    当然,这个这只是设计模式中的一个小小的应用而已,其实传参在设计模式中还是比较常见,平常的如intstring型的作为参数比较常见,但在实际大型软件运用中这远远不够的,有时候一个类,对象,属型都可以作为参数来传递,这些往往比较复杂~~

    设计模式中告诉我们主要一下几点:

    1:不要重复设计。利用拷贝粘贴那是低级程序员要干的事,而且这样做的坏处是当在很多地方重复设计时,如果需要修改重构,则工作量大得惊人,也容易出错!

    2:低耦合,高内聚。至于什么是耦合,什么是内聚可以去百度一下。当两个类之间耦合度越低,则这两个类之间的关联就越少,修改一个类就不会去破坏另一个类的运作。一个类中的实现功能最好高内聚,剔除一些不必要的代码

    3:依赖倒转原则。就是高层模块不要依赖底层模块,而是两者都要依赖抽象;抽象不应该依赖细节,而细节应该依赖抽象。只要抽象和接口稳定,则更改任何一个地方都不会对别的地方造成影响,同时这样也能够很好得复用。

    4:单一原则。当一个类承担过多的功能过多的设计的时候就等于把这些原则耦合在一起,一个职责的变化可能会抑制这个类完成其他的职责,这种设计会导致脆弱的设计。

    5:开放封闭原则。对扩展开放,对修改封闭。设计软件最好遵循OO原则,做到少修改,多扩展。

    6:多层封装。经典的三层结构告诉我们,把不同功能的层封装起来,这样结构很清晰和条理,易于维护,而且修改其中一层也不会给其他层带来多少影响

    ……

    总之一句话:我们设计的软件要扩展性好,可复用,易于维护,灵活性好……

  • 相关阅读:
    IOS使用正则表达式去掉html中的标签元素,获得纯文本
    iOS 拨打电话的三种方式总结
    iOS中Block的基础用法
    如何避免在Block里用self造成循环引用
    对MAC自带的SVN进行升级
    IOS开发之记录用户登陆状态
    Xcode7 添加PCH文件
    mysql upgrade
    Ubuntu下更改用户名和主机名
    mysql 查询的时候没有区分大小写的解决方案
  • 原文地址:https://www.cnblogs.com/saper/p/1313261.html
Copyright © 2020-2023  润新知