问题:
1.dao的实现需要变成mybatis
2.dao的实现要变成Hibernate
关键词:解耦
3.工厂模式分类
简单工厂模式:
特点
1 它是一个具体的类,非接口 抽象类。有一个重要的create()方法,利用if或者 switch创建产品并返回。
2 create()方法通常是静态的,所以也称之为静态工厂。
缺点
1 扩展性差(我想增加一种面条,除了新增一个面条产品类,还需要修改工厂类方法)
2 不同的产品需要不同额外参数的时候 不支持。
工厂方法模式:
抽象工厂模式:
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码
4.简单工厂模式代码:
使用的时候:
Dumpling dumpling = DumplingFactory.createDumpling("三鲜");
dumpling.desc();
接口:Dumpling
public interface Dumpling {
/**
* 饺子的描述信息
*/
void desc();
}
类:DumplingFactory
public class DumplingFactory {
public static Dumpling createDumpling(String type){
Dumpling dumpling = null;
switch (type) {
case "三鲜":
dumpling = new SanXianDumpling();
break;
case "猪肉":
dumpling = new PorkDumpling();
break;
}
return dumpling;
}
}
类:PorkDumpling
public class PorkDumpling implements Dumpling {
/**
* 饺子的描述信息
*/
@Override
public void desc() {
System.out.println("猪肉饺子");
}
}
类:SanxianBun
public class SanxianBun implements Bun{
@Override
public void desc() {
System.out.println("三鲜包子");
}
}
5.工厂模式代码:
接口:DumplingFactory
public interface DumplingFactory {
/**
* 获取饺子
* @return
*/
Dumpling createDumpling();
}
类:PorkDumplingFactory
public class PorkDumplingFactory implements DumplingFactory {
/**
* 获取饺子
*
* @return
*/
@Override
public Dumpling createDumpling() {
return new PorkDumpling();
}
}
类:SanXianDumplingFactory
public class SanXianDumplingFactory implements DumplingFactory {
/**
* 获取饺子
*
* @return
*/
@Override
public Dumpling createDumpling() {
return new SanXianDumpling();
}
}
使用方法:
DumplingFactory dump = new PorkDumplingFactory();
Dumpling du=dump.createDumpling();
du.desc();
6.抽象工厂代码:
接口:AbstractFactory
public interface AbstractFactory {
Dumpling createDumpling();
Bun createBun();
}
类:PorkFactory
public class PorkFactory implements AbstractFactory {
@Override
public Dumpling createDumpling() {
return new PorkDumpling();
}
@Override
public Bun createBun() {
return new PorkBun();
}
}
类:SanXianFactory
public class SanXianFactory implements AbstractFactory {
@Override
public Dumpling createDumpling() {
return new SanXianDumpling();
}
@Override
public Bun createBun() {
return new SanxianBun();
}
}
7.调用方法(弊端:就是一旦接口中添加了新的东西实现类就要实现)
建议将抽象工厂改成抽象方法
// 抽象工厂
AbstractFactory factory = new SanXianFactory();
Dumpling dumpling = factory.createDumpling();
dumpling.desc();