总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
1.工厂模式
1.1普通工厂模式
先创建一个接口:
public interface Animal {
public void eat();
}
在创建实现类:
public class Cat implements Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
public class Dog implements Animal {
@Override
public void eat() {
System.out.println("狗吃肉");
}
}
创建工厂:
public class AnimalFactory {
public Animal create(String animal){
if ("Cat".equalsIgnoreCase(animal)){
return new Cat();
}else if ("Dog".equalsIgnoreCase(animal)){
return new Dog();
}else {
System.out.println("请输入正确类型");
return null;
}
}
}
测试结果
public class FactoryTest {
public static void main(String[] args) {
AnimalFactory animalFactory = new AnimalFactory();
Animal cat = animalFactory.create("cat");
cat.eat();
}
}
输出结果:猫吃鱼
1.2静态工厂模式
由工厂提供静态方法,来调用获取实例
创建工厂:
public class AnimalFactory {
public static Animal createCat(){
return new Cat();
}
public static Animal createDog(){
return new Dog();
}
}
测试:
public class FactoryTest {
public static void main(String[] args) {
Animal dog = AnimalFactory.createDog();
dog.eat();
}
}
最后输出结果为:狗吃肉
1.3抽象工厂模式
在添加新功能时,不需要修改原代码,通过实现工厂接口的方式来获取对象
创建一个工厂接口
public interface AbstractFactory {
public Animal create();
}
创建工厂实现类
public class CatFactory implements AbstractFactory {
@Override
public Animal create() {
return new Cat();
}
}
public class DogFactory implements AbstractFactory {
@Override
public Animal create() {
return new Dog();
}
}
进行测试:
public class FactoryTest {
public static void main(String[] args) {
AbstractFactory catFactory = new CatFactory();
Animal cat = catFactory.create();
cat.eat();
}
}
这个模式的好处:新增功能时,只需要一个工厂实现类实现工厂接口,和动物实现类就可以实现功能,不需要修改原代码,扩展性比较好