设计模式
策略模式
将行为封装为接口,实现算法族。在超类里面放入行为接口对象,在子类里面具体设定行为
原则:分离变化部分封装为接口,基于接口编程各种功能此模式让行为算法得变化独立与算法的使用者
举个栗子:鸭子抽象类里面有叫声,游泳方法,外形显示为抽象方法当有新的需求如鸭子会飞的方法时,需把飞的方法放到超类里面,但有些鸭子时不会叫,不会游泳,不会飞的。所以把叫,游泳,飞的行为封装为接口,这样就有了叫,游泳,飞各自的算法族,将接口对象放到超类里面,这样代码复用性提高,维护更方便
观察者模式
对象之间多对一依赖的一种设计方案。被依赖的对象为主,依赖的对象为观察员,除通知观察员变化
举个栗子:互联网气象站对象中有获取温度,湿度,气压,数据变化四个方法,实现主题接口包括注册,删除,发布通知三个功能公告板或第三方需要气象信息服务的对象实现观察员接口包括更新气象数据和显示功能。当有第三方需要获取气象服务时在互联网气象站对象中注册,在气象信息发生变化时触发数据变化方法循环通知主题里面所有注册的对象,第三方更新气象数据并进行显示
备注:JAVA中内置观察者Observeable是一个类而不是接口
装饰者模式
动态的将新功能附加到对象上,在对象功能扩张方面,它比继承更有弹性
举个栗子:饮料店有各种各样的单品,比如奶茶,咖啡咖啡有不同种类如shortBlack,咖啡,饮料里面还可以添加调料如糖,甜奶,豆浆将饮料抽象为超类饮料的饮料(),包括描述说明递减描述属性,价格priice价格属性。抽象咖啡单品咖啡卡菲()为子类继承饮料,装饰类decorater()也继承饮料。调料类乳()继承decorater类,在decorater类中传入超类饮料饮用()对象,调用父类成本()方法将超类的价格加在子类的价格上,当有多个调料时会调用多次decorater类,每个调料调用传入超类对象的成本()方法,如此递归调用后得出饮料()对象的总价。
单例模式
确保一个类只有一个实例对象,并提供一个全局访问点(私人修饰构造方法)
多线程优化:
同步(synchronized)的的getInstance方法
“急切”创建实例(在类创建时就创建该对象,无论是否会用到)
双重检查加锁(使用volatile修饰初始化对象)
工厂模式
简单工厂模式:定义了一个创建对象的类,有这个类来封装实例化对象的行为
工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类,工厂方法模式将对象的实例化推迟到子类
依赖抽象原则
变量不要持有具体类的引用
不要让类继承具体类,要继承自抽象类和接口
不要覆盖已实现的方法
抽象工厂模式:定义了一个接口用于创建相关或有依赖的对象族,而无需指明具体类
举个栗子:有一家披萨店能做不同口味的披萨,简单工厂模式定义了一个创建披萨对象的类,用这个类来创建不同口味的披萨对象
当这个披萨店要开分店时,得再创建一个分店的创建披萨类,这时就需要修改原来的代码。工厂模式把创建披萨的类抽象,具体哪个分店需要怎样的创建披萨类则继承该抽象类,在子类里面维护不同口味的披萨类的对象创建
抽象工厂模式则是定义了一个抽象工厂接口用于创建披萨,不同的工厂继承接口来维护该工厂生产的不同口味的披萨,在创建披萨时传入不同的工厂对象,使用不同的工厂对象产出不同的披萨
命令模式
将请求,命令,动作等封装成对象,这样可以让项目使用这些对象来参数化其他对象。使得命令得请求者和执行者解耦
举个栗子:遥控器开关灯,音响功能传统面向对象方法定义一个遥控器接口,在实现该接口的遥控器对象构造里面传入要遥控的对象,通过开关调用传入对象的开关功能
命令模式则是在此基础上将遥控器的命令定义为一个接口,不同媒体实现该接口维护各自的媒体命令。在实现遥控器接口的遥控器对象构造里面传入命令对象,将命令对象分配到遥控器对象的开关命令数组里面,通过传入命令数组下标调用对应命令对象的方法

浙公网安备 33010602011771号