设计模式基础

网友投稿 288 2022-11-04


设计模式基础

23种设计模式!

策略模式抽象工厂模式工厂方法模式代理模式桥接模式原型模式模板方法模式备忘录模式命令模式状态模式组合模式解释器模式适配器模式迭代器模式单例模式观察者模式访问者模式中介者模式装饰模式外观模式亨元模式职责链模式亨元模式备忘录模式

问你怕未?

虽然有这么多种模式,但基础是面向对象。其中有两样东西是屡用不爽:

一、多态

主要表现在 将子类对象赋给父类使用,或者是实现了接口的对象赋给接口进行使用。

大概,这就是为什么要针对接口来编程的原因吧。

示例:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace example{ class Program { abstract class Animal { public abstract void Shout(); } class Dog : Animal { public override void Shout() { Console.WriteLine("汪汪"); } } class Cat : Animal { public override void Shout() { Console.WriteLine("喵喵"); } } class Mouse : Animal { public override void Shout() { Console.WriteLine("吱吱"); } } static void Main(string[] args) { IList list = new List(); list.Add(new Dog()); list.Add(new Cat()); list.Add(new Mouse()); foreach (Animal animal in list) { animal.Shout();//一切都以父类Animal之名进行调用 } Console.Read(); } }}

这部分涉及到设计模式里面的 里氏代换原则、依赖倒转原则。

二、聚合/合成

人人皆知,面向对象的三个特性是封装、继承和多态。多态上面讲了,封装,屏蔽细节,是类内部的事情,不用多言;继承,更加容易接受。面向过程的编码,提高了代码的重用,非常符合人们的直观思维,而面向对象的继承,跟面向过程代码重用的思路是一致的,子类可以直接使用父类的公开、保护属性、方法,真爽!所以就我自己而言,面向对象的特性中,继承是用得最多的,都成了下意识的动作了。

可是,继承有造成失控的危险,一层层地继承下来,东西会越来越多。我之前就是这样,比如搞了一些ASP.NET的页面类,继承了System.Web.UI.Page,然后自己又加了很多东西,有基类,有子类,层层继承,最后的页面对象,编码时,键入“.”,代码自动提示的列表里,N多东西,暴露了很多细节,原因是里面有太多的protected级别的方法、属性。后来我将这部分逻辑封装在一个独立类里面,然后在页面基类创建该类的实例,只访问其public的东西,则后面的页面使用页面类时,就只有很少的一些东西供调用了,逻辑、封装都好了很多。

继承是垂直的,而聚合/合成是横向的,我们应该尽量使用聚合/合成,是为 合成/聚合复用原则

虽然我开发生涯已有十几年,但惭愧得很,设计模式只是近期才接触。未接触之前,心里多少有点不服气,人言世无仲尼,万古如长夜。难道设计模式也这么牛,没有了它,我们就不会编程了吗?难道我们以前都在打酱油?

学习了以后,才知道自己水平真是差太远了,对面向对象的理解,仅仅皮毛而已。从此在工作中,时刻考虑着该用什么设计模式,或者这些代码是是什么设计模式,进入修炼设计模式的第二层境界:过度设计阶段。

离无招胜有招,随意使用的境界还远得很。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:快速获取表的记录数
下一篇:苹果查询序列号API(苹果查询序列号怎么查)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~