抽象工厂模式 -AbstractFactory

场景设计:

江苏和北京的工厂生产16和64位的Iphone,小米手机

手机抽象工厂:

package com.abstractfactory;

/**
 * 抽象工厂
 * @author Administrator
 *
 */
public interface PhoneFactory {
    
    // 16G的手机产品
    public Product16 product16();  
   
    // 64G的手机产品
    public Product64 product64();  
}

抽象产品:

   16G手机

package com.abstractfactory;

/**
 * 抽象产品
 * @author Administrator
 *
 */
public interface Product16 {

    // 16G手机
    public abstract void the16Phone(); 
}

  64G手机:

package com.abstractfactory;

/**
 * 抽象产品
 * @author Administrator
 *
 */
public interface Product64 {
    
    // 64G手机
    public abstract void the64Phone(); 
}

产品实现:

小米16G,64G

16G:
package com.abstractfactory;

public class Mi16 implements Product16 {

    @Override
    public void the16Phone() {
        System.out.println("这是16G的小米手机");
    }
}
64G:
package com.abstractfactory;

public class Mi64 implements Product64 {

    @Override
    public void the64Phone() {
        System.out.println("这是64G的小米手机");
    }
}

Iphone16G,64G

16G:
package com.abstractfactory;

public class Iphone16 implements Product16 {

    @Override
    public void the16Phone() {
        System.out.println("这是16G的苹果手机");
    }
}
64G:
package com.abstractfactory;

public class Iphone64 implements Product64 {

    public void the64Phone() {
        System.out.println("这是64G的苹果手机");
    }
}

工厂实现:

江苏工厂:
package com.abstractfactory;

public class JiangsuFactory implements PhoneFactory {

    @Override
    public Product16 product16() {
        return new Mi16();
    }

    @Override
    public Product64 product64() {
        return new Mi64();
    }
}
北京工厂:
package com.abstractfactory;

public class BeijingFactory implements PhoneFactory {

    @Override
    public Product16 product16() {
        return new Iphone16();
    }

    @Override
    public Product64 product64() {
        return new Iphone64();
    }
}

测试类:

package com.abstractfactory;

public class PhoneTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        
        // BeijingFactory 生产的是苹果手机
        PhoneFactory factory1 = new BeijingFactory();
        Product16 product16 = factory1.product16();
        product16.the16Phone();
        Product64 product64 = factory1.product64();
        product64.the64Phone();
        
        // JiangsuFactory生产的是小米手机
        PhoneFactory factory2 = new JiangsuFactory();
        product16 = factory2.product16();
        product16.the16Phone();
        product64 = factory2.product64();
        product64.the64Phone();
    }
}

优缺点:
优点:
1、抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。
2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
3、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
 
缺点:
增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。


你可能感兴趣的:(设计模式,抽象工厂模式,abstractfactory)