浅谈设计模式

                     大家好,在这个版块儿,主要讨论一下设计模式(Design Pattern),上学期学了设计模式这门课,针对其中三个模式做了presentation。在学习过程中,深深感觉到了设计模式对于software developer的重要性,在此,将讨论23种不同的设计模式,1,为了方便自己复习,更熟练的掌握这些知识。2,为了和大家交流经验,共同提高。在此,先对设计模式做个简单的介绍。

                     什么是设计模式?设计模式(Design Pattern)是一套被反复使用,多数人知道的,经过分类编目,代码设计的总结。在程序中使用设计模式,是为了重用代码,从而达到节省时间与空间利用率;更使代码易被人理解,保证代码的可靠性。设计模式是软件工程的基石,对于软件工程师是非常必要掌握的知识。

                     接下来,我们讨论一下为什么我们要学习设计模式,也就是学习设计模式motivation。设计模式最根本的宗旨是为了代码复用,增加可维护性。在面向对象程序设计(Object Oriented Programming)中,有几个原则:开闭原则(Open Closed Principal,OCP),里氏代换原则(Liskov Substitution Principal, LSP),依赖倒转原则(Dependency Inversion Principal,DIP),接口隔离原则(Interface Segregation Principal,ISP),聚合复用原则(Composite Reuse Principal,CRP),最小知识原则(Principal of Least Knowledge,PLK)。设计模式其实就是实现了这些原则,从而达到了增加代码复用,达到了可维护的作用。接下来详细介绍这几种原则。

                     开闭原则(Open Closed Principal):开闭原则的核心就是对于系统,对其功能的扩展是开放的,允许软件工程师对其功能进行扩展。但是对于原有代码的修改,是封闭的,是不允许的。正如Bertrand Meyer 1988年所说的:“Software entities should be open for extension, but closed for motivation.” 如何实现开闭原则呢?实现开闭原则的关键就是抽象类,即为把系统所有可能的行为抽象为一个抽象底层,这个底层要预见所有扩展的可能,即在所有情况下,系统的抽象底层不需要修改。我们可以通过继承,重载,委托的手段实现功能扩展。

                    里氏代换原则(Liskov Substitution Principal):里氏代换原则定义,任何基类可以出现的地方,子类一定也可以出现,LSP是继承复用的基石,当子类替换基类时,系统功能不会受到影响,基类才可以被真正的复用。从而也可以在子类中相对的增加新功能。因此LSP是对于OCP的补充。通过上一段落,我们知道,实现OCP的核心技术就是实现抽象类,然而基类与子类的继承关系就是抽象化的具体实现。例如我们有两个类A与B,类B继承类A,在一些情况,类B没法完全取代类A,在这时候,LSP原则就会被违反,因此我们在这时候的解决方案就是创建一个新的抽象类C,将A与B的共同行为移到C中来解决问题。并且将B与A之间的关系更改为委派关系。

                    依赖倒转原则(Dependency Inversion Principal,DIP):依赖倒转原则有两个关键的宗旨:1,抽象不应该依赖于细节,细节应当依赖于抽象;2,要针对接口编程,而不是针对实现编程。传递参数,或者在组合聚合关系中,尽量引用层次高的类。

                     接口隔离原则(Interface Segregation Principal,ISP):ISP的核心原则为:使用多个专门的接口要比使用一个总的接口要好很多,一个类对另外一个类的依赖性应当是建立在最小的接口上的。一个接口代表一个角色,不应该把不同的角色交给一个大的接口,没有关系的接口合并在一起,形成了一个大的接口,是对接口与角色的污染!

                     合成/聚合复用原则(Composite/Aggregate Reuse Principal,CARP):合成复用原则的核心就是在一个新的对象里使用一些已有的对象,使之成为新对象的一部分,新对象对这些已有对象的委派达到复用已有功能的目的。从而继承关系就少了很多。

                     上面介绍了OOD的几种核心原则。这些原则都是实现设计模式的核心思想。下面我们来讨论一下设计模式的四个基本要素。

                     1,模式名称:用几个英文单词来形象的表述这个模式。给学习者和使用者直观的印象。

                     2,问题:描述了何时使用这个模式,来解决什么样的问题。

                     3,解决方案:描述了设计的组成成分,他们之间的相互关系以及各自的职责和协作方式。

                     4,效果:描述了这个模式所应用后得到的效果。从程序的时间和空间复杂度去考虑。

                     下面我们来介绍一下一些基本的设计模式,将在后续文章中用C#和C++语言对每个模式给出范例。设计模式大体上分为三种类型,一共23个设计模式。

                      1,创建型模式:单件模式,抽象工厂模式,建造者模式,工厂模式,原型模式。

                      2,结构型模式:适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式。

                      3,行为型模式:模板方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,解释器模式,状态模式,策略模式,职责链模式,访问者模式

 

 

Java是一种面向对象的编程语言,设计模式可以帮助我们更好地编写面向对象的代码。在JavaWeb项目中,设计模式可以帮助我们解决一些常见的问题,比如复杂的业务逻辑、代码重用、可扩展性等等。 下面是一些常见的设计模式在JavaWeb项目中的使用: 1. MVC模式:MVC模式是一种常见的设计模式,它将应用程序分为三个部分:模型、视图和控制器。在JavaWeb项目中,我们可以使用MVC模式来分离业务逻辑和用户界面,并且可以更容易地进行修改和维护。 2. 工厂模式:工厂模式是一种创建型设计模式,它可以帮助我们更好地组织代码并提高代码的可复用性。在JavaWeb项目中,我们可以使用工厂模式来创建对象,并且可以根据需要动态地创建不同的对象。 3. 单例模式:单例模式是一种创建型设计模式,它保证了一个类只有一个实例,并提供了一个全局访问点。在JavaWeb项目中,我们可以使用单例模式来管理共享资源,比如数据库连接池。 4. 观察者模式:观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,它的所有依赖对象都会得到通知并自动更新。在JavaWeb项目中,我们可以使用观察者模式来实现事件驱动的编程。 5. 装饰器模式:装饰器模式是一种结构型设计模式,它允许我们动态地添加或修改一个对象的功能。在JavaWeb项目中,我们可以使用装饰器模式来扩展一个类的功能,而不需要修改它的原始代码。 当然,在JavaWeb项目中还有很多其他的设计模式可以使用,具体使用哪些设计模式需要根据具体的情况而定。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值