工厂模式总结
工厂模式是非常常用的一种设计模式,比如spring的bean工厂底层就是运用到了工厂模式,
首先介绍一下简单工厂,它并不是一种设计模式,只是一种大家常用的设计方法。核心就是把事务的核心特性抽取出来,接口化,之后通过实现这个接口从而达到实现其核心和功能,最后生成一个工厂来管理生成这些对象。
interface door{
float setHeight();
float setWidth();
}
class WoodenDoor implements door{
private float height;
private float width;
public WoodenDoor(float height, float width) {
this.height = height;
this.width = width;
}
@Override
public float setHeight() {
return height;
}
@Override
public float setWidth() {
return width;
}
}
class IronDoor implements door{
private float height;
private float width;
public IronDoor(float height, float width) {
this.height = height;
this.width = width;
}
@Override
public float setHeight() {
return height;
}
@Override
public float setWidth() {
return width;
}
}
class DoorFactory{
public static door doorMaker(String door,float height,float width){
if(door.equals("wood")){
return new WoodenDoor(height,width);
}else if(door.equals("iron")){
return new IronDoor(height, width);
}
return null;
}
}
但是随着物品的增多,一个工厂里的代码就会变得非常多,不好维护,我们就可以把每一件物品都写一个专门的工厂去生产,也就是工厂模式。
interface door{
void description();
}
class WoodenDoor implements door{
@Override
public void description() {
System.out.println("我是木门!");
}
}
class IronDoor implements door{
@Override
public void description() {
System.out.println("我是铁门!");
}
}
abstract class DoorFactory{
abstract public door getDoor();
public void installDoor(){
door d=this.getDoor();
d.description();
System.out.println("开始装门!");
}
}
class WoodenFactory extends DoorFactory{
@Override
public door getDoor() {
return new WoodenDoor();
}
}
class IronFactory extends DoorFactory{
@Override
public door getDoor() {
return new IronDoor();
}
}
这里在原来的基础上改写了工厂类,让他变为了一个接口或者抽象方法,之后在给每一个物体写一个单独的工厂,实现工厂的抽象类,之后调用即可!
后面的抽象工厂方法,本质和工厂方法差不多,它是属于一系列工厂方法的集合,本来一个工厂只能生产一个物品,抽象工厂中一个工厂可以生产更多的物品和属性。
总结要点就是,
1.定义物品特性接口
2.实现类实现接口
3.定义抽象工厂接口,包含上面定义的接口(多个)
4.写抽象工厂的实现类,实现抽象工厂方法。
5,调用实现类进行操作。