抽象工厂模式:当我们有一个产品,比如手机,有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/天,具体规则查看活动详情