23中设计模式

1、23种设计模式

java的设计模式大致上分为三大类:

  • 建立型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。
  • 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
  • 行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

设计模式遵循的原则有6个:

一、开闭原则(Open Close Principle)html

  对扩展开放,对修改关闭java

二、里氏代换原则(Liskov Substitution Principle)编程

  只有当衍生类能够替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也可以在基类的基础上增长新的行为。设计模式

三、依赖倒转原则(Dependence Inversion Principle)ide

  这个是开闭原则的基础,对接口编程,依赖于抽象而不依赖于具体。函数

四、接口隔离原则(Interface Segregation Principle)工具

  使用多个隔离的借口来下降耦合度。spa

五、迪米特法则(最少知道原则)(Demeter Principle)设计

  一个实体应当尽可能少的与其余实体之间发生相互做用,使得系统功能模块相对独立。3d

六、合成复用原则(Composite Reuse Principle)

  原则是尽可能使用合成/聚合的方式,而不是使用继承。继承实际上破坏了类的封装性,超类的方法可能会被子类修改。

2、经常使用设计模式

1. 工厂模式(Factory Method)

  经常使用的工厂模式是静态工厂,利用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();
        }
    }
}
工厂模式

2. 抽象工厂模式(Abstract Factory)

  一个基础接口定义了功能,每一个实现接口的子类就是产品,而后定义一个工厂接口,实现了工厂接口的就是工厂,这时候,接口编程的优势就出现了,咱们能够新增产品类(只须要实现产品接口),只须要同时新增一个工厂类,客户端就能够轻松调用新产品的代码。

  抽象工厂的灵活性就体如今这里,无需改动原有的代码,毕竟对于客户端来讲,静态工厂模式在不改动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

相关文章
相关标签/搜索