一、开闭原则(Open Close Principle)html
对扩展开放,对修改关闭。java
二、里氏代换原则(Liskov Substitution Principle)编程
只有当衍生类能够替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也可以在基类的基础上增长新的行为。设计模式
三、依赖倒转原则(Dependence Inversion Principle)ide
这个是开闭原则的基础,对接口编程,依赖于抽象而不依赖于具体。函数
四、接口隔离原则(Interface Segregation Principle)工具
使用多个隔离的借口来下降耦合度。spa
五、迪米特法则(最少知道原则)(Demeter Principle)设计
一个实体应当尽可能少的与其余实体之间发生相互做用,使得系统功能模块相对独立。3d
六、合成复用原则(Composite Reuse Principle)
原则是尽可能使用合成/聚合的方式,而不是使用继承。继承实际上破坏了类的封装性,超类的方法可能会被子类修改。
经常使用的工厂模式是静态工厂,利用static方法,做为一种相似于常见的工具类Utils等辅助效果,通常状况下工厂类不须要实例化。
总结:理解为一个工厂,若是要制造一个产品,只须要输入这个产品的相关参数,这个工厂就能够把这个产品生产出来,不须要知道工厂内部是如何是制造的。
interface food{} class A implements food{} class B implements food{} class C implements food{} public class StaticFactory { private StaticFactory(){} //私有构造函数 public static food getA(){ return new A(); } public static food getB(){ return new B(); } public static food getC(){ return new C(); } } class Client{ //客户端代码只须要将相应的参数传入便可获得对象 //用户不须要了解工厂类内部的逻辑。 public void get(String name){ food x = null ; if ( name.equals("A")) { x = StaticFactory.getA(); }else if ( name.equals("B")){ x = StaticFactory.getB(); }else { x = StaticFactory.getC(); } } }
一个基础接口定义了功能,每一个实现接口的子类就是产品,而后定义一个工厂接口,实现了工厂接口的就是工厂,这时候,接口编程的优势就出现了,咱们能够新增产品类(只须要实现产品接口),只须要同时新增一个工厂类,客户端就能够轻松调用新产品的代码。
抽象工厂的灵活性就体如今这里,无需改动原有的代码,毕竟对于客户端来讲,静态工厂模式在不改动StaticFactory类的代码时没法新增产品,若是采用了抽象工厂模式,就能够轻松的新增拓展类。
interface food{} //基类,定义了具体的产品该拥有的方法 class A implements food{} class B implements food{} //比工厂模式在这里多加了一个接口,直接获取产品基类 interface produce{ food get();} class FactoryForA implements produce{ @Override public food get() { return new A(); } } class FactoryForB implements produce{ @Override public food get() { return new B(); } } public class AbstractFactory { public void ClientCode(String name){ food x= new FactoryForA().get(); x = new FactoryForB().get(); } }
http://www.cnblogs.com/java-my-life/archive/2012/03/31/2425631.html
https://www.cnblogs.com/wmbg/p/6943878.html