设计模式总结(面试必问二)


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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值