略读设计模式(一)

  一直想着通读一遍设计模式,感觉自己在这方面是很薄弱的。但今晚读 刘伟 前辈的设计模式,感觉到这本书再怎么读,没有在实际中使用的话,终归是太过于纸上谈兵。不过,俗话说“冰冻三尺非一日之寒”,多少了解一点还是有很多好处的。引用书里一句话:模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。说白了,所谓的设计模式,就是前人在解决问题方面,比较好的模式、方法而已。
  另外,今天,看垠神的文章《解密“设计模式”》,他说“它变成了一种教条,带来了公司里程序的严重复杂化。”说的也挺对的。所以,要活学活用,不要死板硬套,写代码就想用点模式,导致代码真的很死板。

面向对象的七大原则:

  • 单一职责原则
    一个类只负责一个功能领域中的相关职责
  • 开闭原则
    软件实体应对扩展开放,而对修改关闭
  • 里氏替换原则
    所有引用基类对象的地方能够透明地使用其子类对象。在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立
  • 依赖倒转原则
    抽象不应该依赖于细节,细节应当依赖于抽象。要针对接口编程,而不是针对实现编程
  • 接口隔离原则
    使用多个专门的接口,而不使用单一的总接口
  • 合成复用原则
    尽量使用对象组合,而不是继承来达到复用的目的
  • 迪米特法则
    一个软件实体应当尽可能少地与其他实体发生相互作用

单例模式:

class TaskManager {
    private static TaskManager tm = null;
    public static TaskManager getInstance() {
        if (tm == null) {
            tm =     new TaskManager();
        }
        return tm;
    }
}

工厂模式:

abstract class Product {
    public void methodSame() {
    }
    public abstract void methodDiff();
}

class ConcreteProduct extends Product {
    public void methodDiff() {
    }
}

class Factory {
    public static Product getProduct(String arg) {
        Product product = null;
        if (arg.equalsIgnoreCase("A")) {
            product = new ConcreteProductA();
        }else if     (arg.equalsIgnoreCase("B")) {
            product = new ConcreteProductB();
        }
        return product;
    }
}

克隆模式:

class ConcretePrototype implements Prototype {
    private String attr;    
    public void setAttr(String attr) {
        this.attr = attr;
    }
    public String getAttr() {
        return this.attr;
    }
    public Prototype clone() {
        Prototype prototype = new ConcretePrototype();
        prototype.setAttr(this.attr);
        return prototype;
    }
}

书籍地址:https://gof.quanke.name/

发表评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.