java工厂模式和抽象工厂模式学习笔记


工厂模式:


(图来自慕课网)

这是一个生产左偏发型,右偏发型的列子

1.创建接口HairInterface,只有一个方法draw

public interface HairInterface {
public void draw();
}

2.创建LeftHair和RightHair,全部实现HairInterface

(1)创建LeftHair

public class LeftHair implements HairInterface {
@Override
public void draw() {
System.out.println("----左偏发型------");
}
}

(2)创建RightHair

public class RightHair implements HairInterface {
@Override
public void draw() {
System.out.println("----右偏发型------");
}
}

3.创建生产者HairFactory

public class HairFactory {
public HairInterface getHair(String key){
//在工厂内部实现生产,即new对象,而不需要在客户端去生产,客户端只需要告诉工厂要什么产品
if("left".equals(key)){
return new LeftHair();
}else if("right".equals(key)){
return new RightHair();
}else{
return null;
}
}
}

4.客户端获取产品

public class Client {
public static void main(String[] args) {
HairFactory factory = new HairFactory();
//***这里客户端不管要什么类型的产品,都是拿HairInterface接收,这样使逻辑上更清晰
HairInterface hair =  factory.getHair("left");
hair.draw();
}
}

抽象工厂模式:


(图来自慕课网)

这是一个生产圣诞/新年女孩,圣诞/新年男孩的例子

1.要生产的产品分为两类Product,男孩、女孩,但是具体还要分圣诞系列、新年系列的男女孩,所以要将男、女孩创建成接口

(1)创建女孩接口

public interface Girl {
public void drawGirl();
}

(2)创建男孩接口

public interface Boy {
public void drawBoy();
}

2.创建圣诞和新年的男女孩,分别实现上面的男、女孩接口

(1)创建圣诞系列女孩

public class MCGirl implements Girl {
@Override
public void drawGirl() {
System.out.println("-----圣诞系列女孩------");
}
}

(2)创建新年系列女孩

public class HNGirl implements Girl {
@Override
public void drawGirl() {
System.out.println("-----新年系列女孩------");
}
}

(3)创建圣诞系列男孩

public class MCBoy implements Boy {
@Override
public void drawBoy() {
System.out.println("----圣诞系列男孩------");
}
}

(4)创建新年系列男孩

public class HNBoy implements Boy {
@Override
public void drawBoy() {
System.out.println("----新年系列男孩------");
}
}

3.开始实现工厂类,因为有两个系列(圣诞、新年系列),所以PersonFactory是接口

(1)创建PersonFactory接口

public interface PersonFactory {
public Girl getGirl();
public Boy getBoy();
}

(2)创建圣诞系列的工厂,实现PersonFactory接口

public class MCFactory implements PersonFactory {
@Override
public Girl getGirl() {
return new MCGirl();
}
@Override
public Boy getBoy() {
return new MCBoy();
}
}

(3)创建新年系列的工厂,实现PersonFactory接口

public class HNFactory implements PersonFactory {
@Override
public Girl getGirl() {
return new HNGirl();
}
@Override
public Boy getBoy() {
return new HNBoy();
}
}

4.创建客户端,可以随意要不同系列的男孩或女孩产品

public class Client {
public static void main(String[] args){
//这里选择哪个系列
PersonFactory factory = new MCFactory();
//这里选择男孩、女孩
Boy boy = factory.getBoy();
boy.drawBoy();
}
}

5.上面的例子对应于抽象工厂的模式类图


总结:

工厂方法是抽象工厂的一种极端情况,抽象工厂是工厂方法的推广情况,其实抽象工厂算是工厂方法应用的集合,多了 《系列》 这个概念。






















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值