记录学习 Java 设计模式(一)

来源:互联网 发布:淘宝客现在的生存状况 编辑:程序博客网 时间:2024/06/08 02:34

记录学习 Java 设计模式(一)

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。

    本文写于本人初步接触设计模式之时,同 时中间会穿插的记录一些学习的设计原则。对于设计模式与原则并没有一个系统的分类,属于记录学习中遇到的问题和看法,希望等给看到的朋友带来启发,大家共同进步。同 时欢迎大家能多多指出在下的不足之处。

开—闭合原则

开—闭合原则(Open Close Principle)最重要的主旨就是对扩展开放,对修改关闭即扩展已有的系统、增加新的行为,但对于已有的抽象层不再修改。概括的说就是:抽象化对可变性的封装

设计模式

  • 单例设计模式(singleton)

    在代码中复用率高的地方,如:Scanner( )等,可以设计成单例。或与回收站类似的功能,不论用户在桌面上删除还是在C盘中删除,我们都会在使用到回收站,如果我们没调用一次就要 new Recycle( ) 那么我们的程序就会显的十分的臃肿,所以我们同样可以使用单例设计。

我们来举个栗子:

        //饿汉式        private static Recycle recycle = new Recycle();        private Recycle() {        }        public static Recycle  getInstance() {            return recycle;        }

那我们测试一下结果:

        Recycle recycle1 = Recycle.getInstance();        Recycle recycle2 = Recycle.getInstance();        System.out.println( recycle1 == recycle2 );

以上会返回一个true,证明我们实际上是用到了一个Recycle。

        //懒汉式        private static Recycle recycle = new Recycle();        private Recycle() {        }        public static Recycle  getInstance() {            return recycle;        }

同样懒汉式的记过也是样的。

  • 简单工厂(引申)

    当我们想要拿到一个水果时,作为消费者的我们不需要亲自去采摘水果,而是直接从商贩那里购买就可以了,同理,当我们需要一辆汽车时,我们不需要参与它的组装,只需要去使用它。

    那么这就引申出了工厂的概念,也就是工厂模式。

我们举个栗子:

首先我们需要一个接口Fruit:

    public interface Fruit {    }

将其接入Apple类 与 Banana类中:

public class Banana implements Fruit {      public Banana() {               System.out.println("Hello Banana");         }}public class Apple implements Fruit {    public Apple() {            System.out.println("Hello Apple");      }}

然后我们再创建一个工厂:

public class FruitFactory {    public static Fruit make( String name ) {           if("apple".equals(name)) {            return new Apple();        }else if("banana".equals(name)) {            return new Banana();        }else {            System.out.println("Sorry NULL");            return null;        }           }}

那么我们在使用时就可以通过这样的方式去使用它:

        Fruit f1 = FruitFactory.make("apple");        Fruit f2 = FruitFactory.make("banana");

我们可以在创建工厂中加载很多的信息,但在用户的操作中是看不到这些操作的,这就构成了一个黑盒。我们是面向对象去操作,而不是面向过程。

同样,我们也可以看到,以上的代码不符合开—闭合原则,当我们新加入另一个水果葡萄(Grape)类时,我们需要拆解工厂中的 else if 所以这只是一个引申,引出 工厂模式抽象工厂模式

原创粉丝点击