1 装饰设计模式(IO流)
对一组对象的功能进行增强时,就可以使用该模式进行问题的解决
好处:耦合行没有那么,被装饰类的变化装饰类的变化无关
特点:装饰类和被装饰类都必须属于同一接口或者父类
interface Coder {
publicvoid code();
}
classStudent implements Coder {
@Override
publicvoid code() {
System.out.println("javase");
System.out.println("javaweb");
}
}
classItcastStudent implements Coder {
privateStudent s; //获取到被包装的类的引用
publicItcastStudent(Student s) { //通过构造函数创建对象的时候,传入被包装的对象
this.s= s;
}
@Override
publicvoid code() { //对其原有功能进行升级
s.code();
System.out.println("数据库");
System.out.println("ssh");
System.out.println("安卓");
System.out.println(".....");
}
}
2 适配器设计模式(Adapter)
* a.什么是适配器
*在使用监听器的时候, 需要定义一个类事件监听器接口.
*通常接口中有多个方法, 而程序中不一定所有的都用到, 但又必须重写, 这很繁琐.
*适配器简化了这些操作, 我们定义监听器时只要继承适配器, 然后重写需要的方法即可.
* b.适配器原理
*适配器就是一个类, 实现了监听器接口, 所有抽象方法都重写了, 但是方法全是空的.
*适配器类需要定义成抽象的,因为创建该类对象,调用空方法是没有意义的
*目的就是为了简化程序员的操作, 定义监听器时继承适配器, 只重写需要的方法就可以了.
3 模版(Template)设计模式
* A:模版设计模式概述
*模版方法模式就是定义一个算法的骨架,而将具体的算法延迟到子类中来实现
* B:优点和缺点
*a:优点
*使用模版方法模式,在定义算法骨架的同时,可以很灵活的实现具体的算法,满足用户灵活多变的需求
*b:缺点
*如果算法骨架有修改的话,则需要修改抽象类
实例:DaoSuppourt(JdbcDaoSupport)
public abstract class DaoSupport{
protectedabstract void checkDaoConfig() throws IllegalArgumentException;
}
public abstract class JdbcDaoSupportextends DaoSupport {
protectedvoid checkDaoConfig() {
if(this.jdbcTemplate == null) {
thrownew IllegalArgumentException("'dataSource' or 'jdbcTemplate' isrequired");
}
}
public final void setDataSource(DataSourcedataSource) {
if(this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()){
this.jdbcTemplate= createJdbcTemplate(dataSource);
}
}
protectedJdbcTemplate createJdbcTemplate(DataSource dataSource) {
returnnew JdbcTemplate(dataSource);
}
publicfinal void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate= jdbcTemplate;
initTemplateConfig();
}
publicfinal JdbcTemplate getJdbcTemplate() {
return this.jdbcTemplate;
}
}
4 工厂模式
* A:工厂方法模式概述
*工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。
* B:优点
*客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
* C:缺点
*需要额外的编写代码,增加了工作量
* D:案例演示
*
动物抽象类:public abstract Animal { public abstract void eat(); }
工厂接口:public interface Factory {public abstract Animal createAnimal();}
具体狗类:public class Dog extends Animal {}
具体猫类:public class Cat extends Animal {}
开始,在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就知道了一个专门的类来创建对象。发现每次修改代码太麻烦,用工厂方法改进,针对每一个具体的实现提供一个具体工厂。
狗工厂:public class DogFactory implements Factory {
publicAnimal createAnimal() {…}
}
猫工厂:public class CatFactory implements Factory {
publicAnimal createAnimal() {…}
}
4.1 简单工厂模式概述
*又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例
* B:优点
*客户端不需要在负责对象的创建,从而明确了各个类的职责
* C:缺点
*这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护
* D:案例演示
*动物抽象类:public abstract Animal { public abstractvoid eat(); }
*具体狗类:public class Dog extends Animal {}
*具体猫类:public class Cat extends Animal {}
*开始,在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就知道了一个专门的类来创建对象。
实例:org.springframework.beans.factory.FactoryBean