java设计模式学习笔记1-简单工厂模式
程序员文章站
2024-01-23 18:09:10
...
使用工厂模式生产桌子,桌子有桌面和桌腿,生产完成后检查桌腿数量与桌面需要的桌腿数量:
1.抽象产品
/**
* 抽象产品-桌面
*/
public interface DeskTop {
/**
* 检查桌面
*/
void checkTop();
}
/**
* 抽象产品-桌腿
*/
public interface DeskLeg {
/**
* 检查桌腿
*/
void checkLeg();
}
2.具体产品
/**
* 具体产品-石头桌腿
*/
@Slf4j
public class StoneDeskLeg implements DeskLeg {
private int legNumber;
public StoneDeskLeg(int legNumber) {
this.legNumber = legNumber;
}
@Override
public void checkLeg() {
log.info("石头桌子的桌腿数量:{}", legNumber);
}
}
/**
* 具体产品-石头桌面
*
* @author zhangshiwei
* @since 2019年4月26日 上午10:30:30
*/
@Slf4j
public class StoneDeskTop implements DeskTop {
private int needLeg;
public StoneDeskTop(int needLeg) {
this.needLeg = needLeg;
}
@Override
public void checkTop() {
log.info("石头桌面需要的桌腿数量:{}", needLeg);
}
}
/**
* 具体产品-木头桌腿
*/
@Slf4j
public class WoodDeskLeg implements DeskLeg {
private int legNumber;
public WoodDeskLeg(int legNumber) {
this.legNumber = legNumber;
}
@Override
public void checkLeg() {
log.info("木头桌子的桌腿数量:{}", legNumber);
}
}
/**
* 具体产品-木头桌面
*/
@Slf4j
public class WoodDeskTop implements DeskTop {
private int needLeg;
public WoodDeskTop(int needLeg) {
this.needLeg = needLeg;
}
@Override
public void checkTop() {
log.info("木头桌面需要的桌腿数量:{}", needLeg);
}
}
3.生产工厂
/**
* 桌腿工厂
*/
public class DeskLegFactory {
public static DeskLeg productDeskLeg(int deskType) {
DeskLeg deskLeg = null;
if (deskType == 1) {
deskLeg = new StoneDeskLeg(4);
} else if (deskType == 2) {
deskLeg = new StoneDeskLeg(3);
}
return deskLeg;
}
}
/**
* 桌面工厂
*/
public class DeskTopFactory {
public static DeskTop productDeskTop(int deskType) {
DeskTop deskTop = null;
if (deskType == 1) {
deskTop = new StoneDeskTop(4);
} else if (deskType == 2) {
deskTop = new WoodDeskTop(3);
}
return deskTop;
}
}
4.生产桌子的工人
/**
* 生产桌子的工人
*/
public class DeskWorker {
private DeskTop deskTop;
private DeskLeg deskLeg;
public void productDesk(int deskTopType, int deskLegType) {
// 准备工作
// 获取桌面和桌腿
makeDesk(deskTopType, deskLegType);
// 组装
// 交付
}
private void makeDesk(int deskTopType, int deskLegType) {
// 生产零件
this.deskTop = DeskTopFactory.productDeskTop(deskTopType);
this.deskLeg = DeskLegFactory.productDeskLeg(deskLegType);
// 检查零件
deskTop.checkTop();
deskLeg.checkLeg();
}
}
5.测试传入参数,生产桌子:
/**
* 简单工厂模式测试
*/
@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@WebAppConfiguration
public class SimpleFactoryTest {
@Test
public void productTest() {
log.info("桌子生产---开始!");
DeskWorker deskWorker = new DeskWorker();
deskWorker.productDesk(1, 1);
log.info("桌子生产---结束!");
}
}
6.测试结果:
7.存在问题: 随意传入桌面和桌腿的参数,可能导致两个零件对不上! 不仅产品型号不同,接口数量也对不上!
8.解决办法:采用抽象工厂模式,直接生产配套的产品.
下一篇: java 计算执行时间