设计模式之工厂模式
简单工厂模式(静态工厂方法)
https://www.cnblogs.com/ygsworld/p/10649491.html
工厂方法模式
作用:生成某个接口的对象
在工厂对象上调用的是创建方法,生成接口的某个实现对象,与直接调用构造器是有区别的。
例子
接口和接口工厂
package com.suny.test;
/**
* @Author:suny
* @Date: 2021/12/19 21:27
* @Description:
*/
public interface Cycle {
/**
* 前进
*/
void move();
}
package com.suny.test;
/**
* @Author:suny
* @Date: 2021/12/19 21:32
* @Description:
*/
public interface CycleFactory {
Cycle getCycle();
}
具体实现类 和实现类的工厂类
package com.suny.test;
/**
* @Author:suny
* @Date: 2021/12/19 21:29
* @Description:
*/
public class Unicyle implements Cycle {
@Override
public void move() {
System.out.println("Unicyle");
}
}
package com.suny.test;
/**
* @Author:suny
* @Date: 2021/12/19 21:31
* @Description:
*/
public class UnicyleFactory implements CycleFactory{
@Override
public Cycle getCycle() {
return new Unicyle();
}
}
package com.suny.test;
/**
* @Author:suny
* @Date: 2021/12/19 21:34
* @Description:
*/
public class BicyleFactory implements CycleFactory {
@Override
public Cycle getCycle() {
return new Bicycle();
}
}
package com.suny.test;
/**
* @Author:suny
* @Date: 2021/12/19 21:30
* @Description:
*/
public class Tricycle implements Cycle {
@Override
public void move() {
System.out.println("Tricycle");
}
}
package com.suny.test;
/**
* @Author:suny
* @Date: 2021/12/19 21:36
* @Description:
*/
public class TricyleFactory implements CycleFactory {
@Override
public Cycle getCycle() {
return new Tricycle();
}
}
具体实现和内部类工厂
package com.suny.test;
/**
* @Author:suny
* @Date: 2021/12/19 21:29
* @Description:
*/
public class Unicyle implements Cycle {
@Override
public void move() {
System.out.println("Unicyle");
}
/**
* 内部类
*/
public static CycleFactory unicyleFactory = new CycleFactory() {
@Override
public Cycle getCycle() {
return new Unicyle();
}
};
}
测试
package com.suny.test;
/**
* @Author:suny
* @Date: 2021/12/19 21:39
* @Description:
*/
public class testFactor {
public static void makeCycle(CycleFactory cycleFactory){
Cycle cycle = cycleFactory.getCycle();
cycle.move();
}
public static void main(String[] args) {
makeCycle(new BicyleFactory());
makeCycle(new TricyleFactory());
makeCycle(new UnicyleFactory());
// 内部类工厂创建
// makeCycle(Unicyle.unicyleFactory);
}
}
//output
Bicycle
Tricycle
Unicyle