抽象工厂模式

来源:互联网 发布:泰德奥plc编程软件 编辑:程序博客网 时间:2024/06/01 17:01

抽象工厂模式是一种比较常用的模式,其定义如下:
为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

使用场景:一个对象族,都有相同的约束,则可以使用抽象工厂模式。

优点:
封装性;
产品组内的条件非公开状态。
缺点:
产品族扩展非常困难;

抽象工厂实现一般代码:

/* * 抽象产品类 */public abstract class AbstractProductA {    //每个产品共有的方法    public void shareMethod() {        // TODO Auto-generated method stub    }    public abstract void dosomething();}
/* * 抽象产品类 */public abstract class AbstractProductB {    //每个产品共有的方法    public void shareMethod() {        // TODO Auto-generated method stub    }    public abstract void dosomething();}
/* *  * 产品A1的实现类 */public class ProductA1 extends AbstractProductA {    public void dosomething() {        // TODO Auto-generated method stub        System.out.println("产品A1的实现方法");    }}
/* *  * 产品A2的实现类 */public class ProductA2 extends AbstractProductA {    public void dosomething() {        // TODO Auto-generated method stub        System.out.println("产品A2的实现方法");    }}
/* *  * 产品B1的实现类 */public class ProductB1 extends AbstractProductB {    public void dosomething() {        // TODO Auto-generated method stub        System.out.println("产品B1的实现方法");    }}
/* * 产品B2的实现类 */public class ProductB2 extends AbstractProductB {    public void dosomething() {        // TODO Auto-generated method stub        System.out.println("产品B2的实现方法");    }}
/* *  * 抽象工厂类 */public abstract class AbstractCreator {    //创建产品A家族    public  abstract AbstractProductA creareProductA();    public  abstract AbstractProductB creareProductB();}
/* *  * 产品等级为1的实现类 */public class Creator1 extends AbstractCreator {    //只生产等级为1的A产品    public AbstractProductA creareProductA() {        // TODO Auto-generated method stub        return new ProductA1();    }    //只生产等级为1的B产品    public AbstractProductB creareProductB() {        // TODO Auto-generated method stub        return new ProductB1();    }}
/* *  * 产品等级为2的实现类 */public class Creator2 extends AbstractCreator {    //只生产等级2的A产品    public AbstractProductA creareProductA() {        // TODO Auto-generated method stub        return new ProductA2();    }    //只生产等级2的B产品    public AbstractProductB creareProductB() {        // TODO Auto-generated method stub        return new ProductB2();    }}
public class Client {    public static void main(String[] args) {        // TODO Auto-generated method stub        //定义出两个工厂        AbstractCreator  creator1=new Creator1();        AbstractCreator  creator2=new Creator2();        //产生A1对象        AbstractProductA a1=creator1.creareProductA();        //产生A2对象        AbstractProductA a2=creator2.creareProductA();        //产生B1对象        AbstractProductB b1=creator2.creareProductB();        //产生A1对象        AbstractProductB b2=creator2.creareProductB();        /*         *          * 然后就可以在这里为所欲为了~~~~~~~~~         */        System.out.println("ok");    }}
0 0
原创粉丝点击