Java设计模式——抽象工厂模式及编程示例

抽象工厂是用来创建其他工厂的类,抽象模式和工厂模式相同,只是工厂类创建具体的产品类,但是抽象工厂模式使用一个超级工厂来创建其他工厂;即工厂的工厂;

这里具体的应用我现在还没有彻底理解,之后在工作实践中有更深的体会之后再来补充相关概念;现在只需要记住抽象工厂是用来创建工厂的;

例如,QQ换皮肤的时候,有白色和黑色两个主题,没个主题对应一个工厂,白色主题的工厂产生各种白色UI组件;黑色主题的工厂将产生各种黑色主UI组件;现在需要在黑色和白色主题之间进行切换的时候,使用工厂建造者来根据不同的情况产生黑色工厂或者白色工厂;

现在来看一个具体的示例;

我们创建一个绘制图形的画板,这里存在不同形状的图形,同时图形需要不同的颜色来进行渲染;

首先定义Shape接口和Color接口,然后创建实现这些接口的具体类(这些类是颜色工厂和形状工厂创建的对象);

之后定义一个抽象超级工厂类AbstractFactory,之后定义继承抽象超级工厂的shape工厂和color工厂;(通过这个抽象超级工厂引用创建不同的工厂(形状工厂和颜色工厂))

然后便可以通过创建的工厂来创建不同的对象;

代码示例
 

public class AbstractFactoryPattern {
    public static void main(String []args){

        FactoryProducer myProducer=new FactoryProducer();
        //获取工厂
        AbstractFactory factory=myProducer.getFactory("Shape");//这里返回shape工厂
        //通过获取的工厂创建对象
        Shape shape=factory.getShape("Circle");//通过shape工厂产生circle对象
            //如果生产color对象则返回null
        Color color=factory.getColor("Red");
    }

}
//定义形状接口,形状工厂通过该接口引用来创建形状对象
interface Shape{

}
//具体的形状类
class Circle implements Shape {
    public  Circle(){
        System.out.println("create an circle !");
    }
}

class Rectangle implements Shape{
    public Rectangle(){
        System.out.println("create a rectangle!!");
    }
}

class Square implements Shape{
    public Square(){
        System.out.println("create a square!!!");
    }
}
//定义颜色接口,颜色工厂通过该接口引用来创建颜色对象
interface Color{

};

//具体的颜色类
class Red implements Color{
    public Red(){
        System.out.println("create a red color!");
    }
}

class Blue implements Color{
    public Blue(){
        System.out.println("create a Blue!!");
    }
}

class Yellow implements Color{
    public Yellow(){
        System.out.println("create a yellow!!!");
    }
}

//为Color和Shape对象创建抽象超级工厂类,工厂建造者将通过该对象引用获取工厂对象;
abstract class AbstractFactory{
    public abstract Color getColor(String colorname);
    public abstract Shape getShape(String shapename);
}

//创建shape工厂
class  ShapeFactory extends AbstractFactory{
    public Shape getShape(String shapename){
        if (shapename==null)
            return null;
        if(shapename.equals("Circle"))
            return new Circle();
        if(shapename.equals("Square"))
            return new Square();
        if(shapename.equals("Rectangle"))
            return new Rectangle();
        return null;
    }
    public Color getColor(String colorname){
        return null;
    }
}
//创建color工厂
class ColorFactory extends AbstractFactory{
    public Color getColor(String colorname){
        if(colorname==null)
            return null;
        if(colorname.equals("Red"))
            return new Red();
        if(colorname.equals("Bule"))
            return new Blue();
        if(colorname.equals("Yellow"))
            return new Yellow();
        return null;
    }
    public Shape getShape(String shapename){
        return null;
    }
}

//创建工厂建造者
class FactoryProducer{
    public AbstractFactory getFactory(String factorytype){
        if(factorytype==null)
            return null;
        if(factorytype.equals("Shape"))
            return new ShapeFactory();
        if(factorytype.equals("Color"))
            return new ColorFactory();
        return null;
    }
}

运行结果

"/Applications/IntelliJ IDEA.app/Contents/jbr/Contents/Home/bin/java" "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=61503:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Users/wesen/Desktop/Idea/designpatterntest/out/production/designpatterntest AbstractFactoryPattern
create an circle !

Process finished with exit code 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值