java 23种设计模式之创建型—抽象工厂模式(3)

抽象工厂模式:当我们有一个产品,比如手机,有2个或多个厂商来生产,比如生产屏幕和外壳,就可以使用抽象工厂模式(Abstract Factory)。

大致的抽象工厂模式分为两大部分:

1,设计部分;

        a,设计一个手机需要那些组件,我们这里指定需要屏幕和外壳2个组建;

        b,设计是如何生产的,或者生产的方式。

2,工厂部分:

        a,指定各个工厂需要生产那写组件,我们这里指定工厂需要生产手机的屏幕和外壳

        b,指定各个工厂是如何生产的,即,按照上面1中定义好的b来生产


根据以上的思路,我们不难用java描述出来:

以下为java代码实现(以下代码为A厂商,B厂商直接复制一份就可以拉):

一个手机我们假定由屏幕和外壳组成


public interface yfA {
	//这里是手机的外壳
	public void scA();
}
public interface fyB {
	//这里是手机的屏幕
	public void scB();
}
刚好设计各个厂商是如何生产的,我们这里是列出A厂商
public class factoryA1 implements yfA {

	@Override
	public void scA() {
		//设计厂商A生产屏幕,所以我们打印出即可
		System.out.println("厂商A生产出了手机的屏幕");
		
	}

}

public class factoryA2 implements fyB {

	@Override
	public void scB() {
		//设计厂商A生产外壳,所以我们打印出即可
		System.out.println("厂商A生产出了手机的外壳");
		
	}

}



这里定义,各个厂商需要生产那些组件(即是生产自己的牌子),A厂商他可能不生产屏幕了,所以这里要定义的,我们这里还是定义屏幕和外壳都生产

abstract class factoryA {
	//工厂A生产出手机的外壳和屏幕
	abstract yfA getyfA1(); 
	abstract fyB getyfB1();
}
工厂的具体实现



public class factoryimplA extends factoryA {
	
	//具体的工厂生产她们自己的产品,产品就是factoryA所定义的
	//工厂实现,分别生产了A1和B1
	@Override
	yfA getyfA1() {
		// TODO Auto-generated method stub
		return new factoryA1();
	}

	@Override
	fyB getyfB1() {
		// TODO Auto-generated method stub
		return new factoryA2();
	}
	//具体的A工厂实现
}
测试类:


首先我们获得工厂部分

factoryA fa = new factoryimplA();

这样我们就获得了一个工厂所要生产的东西,正在生产。。。。。。

然后就去调用我们设计好的产品

yfA fa1 = fa.getyfA1();
fyB fb1 = fa.getyfB1();
fa1.scA();
fb1.scB();

这样,我们就获得了屏幕和外壳,因为每个厂商的工艺不一样,所以最终各个厂商生产的手机也就不一样了。


好了抽象工厂模式就这样完成了,我们再来分析一下开闭原则:如果增加手机的组件,比如芯片,我们发现会增加和修改一些代码,所以就不完全符合开闭原则。但是当我们设计好一个手机的全部组件,就可以拿给不同的厂商生产,这样,它又符合开闭原则了


所以我们要根据具体的业务来选择使用哪一种模式。


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img