10年 Java程序员,硬核人生!勇往直前,永不退缩!

欢迎围观我的git:https://github.com/R1310328554/spring_security_learn 寻找志同道合的有志于研究技术的朋友,关注本人微信公众号: 觉醒的码农,或Q群 165874185

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

工厂角色:

package designpattern.creation.abstractfactory;

public interface IFactory {

    IProductA getProductA();

    IProductB getProductB();
}

package designpattern.creation.abstractfactory;

public class FactoryAB1 implements IFactory{

    public IProductA getProductA() {
        return new ProductA1();
    }
    

    public IProductB getProductB() {
        return new ProductB1();
    }
}

package designpattern.creation.abstractfactory;

public class FactoryAB2 implements IFactory{

    public IProductA getProductA() {
        return new ProductA2();
    }

    public IProductB getProductB() {
        return new ProductB2();
    }

}

产品角色:

package designpattern.creation.abstractfactory;

public interface IProductA {

    void useA();
}

package designpattern.creation.abstractfactory;

public interface IProductB {

    void useB();
}

package designpattern.creation.abstractfactory;

public class ProductA1 implements IProductA {

    public void useA() {
        // TODO Auto-generated method stub
        System.out.println("ProductA1.use()");
    }

}

package designpattern.creation.abstractfactory;

public class ProductA2 implements IProductA {

    public void useA() {
        // TODO Auto-generated method stub
        System.out.println("ProductA2.use()");
    }

}

package designpattern.creation.abstractfactory;

public class ProductB1 implements IProductB {

    public void useB() {
        // TODO Auto-generated method stub
        System.out.println("ProductB1.use()");
    }

}

package designpattern.creation.abstractfactory;

public class ProductB2 implements IProductB {

    public void useB() {
        // TODO Auto-generated method stub
        System.out.println("ProductB2.use()");
    }

}

客户端:

package designpattern.creation.abstractfactory;

/**
 * @param args
 * 
 * 产品继续复杂,出现了不兼容的产品, ———— 即
 * 但是,我们将复杂度交给了客户端,即由客户来选择应该调用的api
 * 
 * 抽象工厂要素:
 * 1 多类的不兼容的产品A、B。 
 * 2 抽象工厂里面有获取不同类别的产品的方法,由有不同类别的具体工厂来实现
 * 3 每个具体工厂为每个类别产品提供一个具体方法,分别来获取具体的产品
 * 4 为每个增加一个细类别产品,则需要增加一个具体工厂,N个具体细类别产品
 * 
 * 使用场景?
 * 对应一些比较复杂的情况,有多类别产品,并且他们不兼容;每类别产品下有多个具体产品
 * 产品类别的格式应该是固定的, 否则可能导致抽象工厂类的修改 !!
 */

public class Client {

    public static void main(String[] args) {
        IProductA producta1 = new FactoryAB1().getProductA();
        producta1.useA();

        IProductB productb1 = new FactoryAB1().getProductB();
        productb1.useB();
        
        IProductA producta2 = new FactoryAB2().getProductA();
        producta2.useA();

        IProductB productb2 = new FactoryAB2().getProductB();
        productb2.useB();
    }

}

 

posted on 2014-08-16 19:51  CanntBelieve  阅读(199)  评论(0编辑  收藏  举报