1.什么是设计模式
(1)设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
(2)设计模式不是一种方法和技术,而是一种思想
(3)设计模式和具体的语言无关,学习设计模式就是要建立面向对象的思想。
(3)尽可能的面向接口编程,低耦合,高内聚,使设计的程序可复用
(4)学习设计模式能够促进对面向对象思想的理解,反之亦然。它们相辅相成
2.设计模式的几个要素
1)名字 必须有一个简单,有意义的名字
2)问题 描述在何时使用模式解决方案 描述设计的组成部分以及如何解决问题
3)效果 描述模式的效果以及优缺点
4)设计模式的分类
创建型模式 对象的创建结构型模式 对象的组成(结构)行为型模式 对象的行为
创建型模式(6个):
简单工厂模式
工厂方法模式
抽象工厂模式
建造者模式
原型模式
单例模式。
结构型模式(7个):
外观模式
适配器模式
代理模式
装饰模式
桥接模式
组合模式
享元模式
行为型模式(10个):
模版方法模式
状态模式
职责链模式
命令模式
访问者模式
策略模式
备忘录模式
迭代器模式
解释器模式
3.工厂方法模式概述
a1.工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。
a2.工厂方法模式优点
客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
a3.工厂方法模式缺点
需要额外的编写代码,增加了工作量
a4.下面通过例子进行说明
动物抽象类:
public abstract Animal { public abstract void eat(); }
具体狗类:
public class Dog extends Animal {}
具体猫类:
public class Cat extends Animal {}
开始,在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就知道了一个专门的类来创建对象。
public class AnimalFactory {
private AnimalFactory(){}
//public static Dog createDog() {return new Dog();}
//public static Cat createCat() {return new Cat();}
//改进
public static Animal createAnimal(String animalName) {
if(“dog”.equals(animalName)) {}
else if(“cat”.equals(animale)) {
}else {
return null;
}
}
}
改进
动物抽象类:
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 {
public Animal createAnimal() {…}
}
猫工厂:
public class CatFactory implements Factory {
public Animal createAnimal() {…}
}