电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

设计模式的原则


发布日期:2024/1/11
 

近年来大家都开始注意设计模式那么到底我们为什么要用设计模式呢?这么多设计模式为什么要这么设计呢?说实话以前我还真没搞清楚就是看大家一口一个Design pattern心就有点发虚于是就买了本四人帮的设计模式结果看得似懂非懂:看得时候好像是懂了过一会就忘了可能是本人比较愚钝吧:))最近有了点感悟独乐不如众乐与大家分享一下还望指教!

为什么要提倡Design Pattern呢?根本原因是为了代码复用增加可维护性那么怎么才能实现代码复用呢?OO界有前辈的几个原则开-闭原则(Open Closed Principal)里氏代换原则合成复用原则设计模式就是实现了这些原则从而达到了代码复用增加可维护性的目的

开-闭原则

此原则是由Bertrand Meyer提出的原文是Software entities should be open for extensionbut closed for modification就是说模块应对扩展开放而对修改关闭模块应尽量在不修改原(是指原来的代码)代码的情况下进行扩展那么怎么扩展呢?我们看工厂模式factory pattern:假设中关村有一个卖盗版盘和毛片的小子我们给他设计一光盘销售管理软件我们应该先设计一光盘接口如图

而盗版盘和毛片是其子类小子通过DiscFactory来管理这些光盘代码为

public class DiscFactory{public static 光盘 getDisc(String name){ return (光盘)ClassforName(name)getInstance();}}

有人要买盗版盘怎么实现呢?

public class 小子{public static void main(String[] args){光盘 d=DiscFactorygetDisc(盗版盘);光盘卖();}}

如果有一天这小子良心发现了开始卖正版软件没关系我们只要再创建一个光盘的子类正版软件就可以了不需要修改原结构和代码怎么样?对扩展开发对修改关闭闭原则

工厂模式是对具体产品进行扩展有的项目可能需要更多的扩展性要对这个工厂也进行扩展那就成了抽象工厂模式

里氏代换原则

里氏代换原则是由Barbara Liskov提出的如果调用的是父类的话那么换成子类也完全可以运行比如

光盘 d=new 盗版盘();

d卖();

现在要将盗版盘类改为毛片没问题完全可以运行Java编译程序会检查程序是否符合里氏代换原则还记得java继承的一个原则吗?子类overload方法的访问权限不能小于父类对应方法的访问权限比如光盘中的方法访问权限是public那么盗版盘毛片中的方法就不能是package或private编译不能通过为什么要这样呢?你想啊如果盗版盘方法是private那么下面这段代码就不能执行了

光盘 d=new 盗版盘();

d卖();

可以说里氏代换原则是继承复用的一个基础

合成复用原则

就是说要少用继承多用合成关系来实现我曾经这样写过程序有几个类要与数据库打交道就写了一个数据库操作的类然后别的跟数据库打交道的类都继承这个结果后来我修改了数据库操作类的一个方法各个类都需要改动牵一发而动全身!面向对象是要把波动限制在尽量小的范围

在Java中应尽量针对Interface编程而非实现类这样更换子类不会影响调用它方法的代码要让各个类尽可能少的跟别人联系不要与陌生人说话这样城门失火才不至于殃及池鱼扩展性和维护性才能提高

理解了这些原则再看设计模式只是在具体问题上怎么实现这些原则而已张无忌学太极拳忘记了所有招式打倒了玄幂二老所谓心中无招设计模式可谓招数如果先学通了各种模式又忘掉了所有模式而随心所欲可谓OO之最高境界呵呵搞笑搞笑!

这是我的一点心得大家可能理解得更深刻还望指教!

上一篇:String的compareTo()方法返回值

下一篇:设计模式(1)Factory模式和Abstract Factory模式