设计模式之抽象工厂

Posted lwdmaib

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之抽象工厂相关的知识,希望对你有一定的参考价值。

技术分享图片

抽象工厂使用场景:

   QQ换皮肤一整套一起换  

1)创建形状接口和颜色接口 和实现该接口的实现类

接口

技术分享图片
/**
 * 定义一个颜色接口
 * @author Administrator
 */
public interface Color {
    //装满
    void fill();
}
View Code
技术分享图片
/**
 * 定义形状接口
 * @author Administrator
 *
 */
public interface Shape {

    void draw();
}
View Code

实现类

技术分享图片
/**
 * 定义一个三角形实例实现形状接口
 * @author Administrator
 *
 */
public class Triangle implements Shape {

    @Override
    public void draw() {
        
       System.out.println("我要化一个三角形");
    }

}
View Code
技术分享图片
import cn.ac.bcc.factory.Shape;
/**
 *  定义一个圆形实例实现形状接口
 * @author Administrator
 *
 */
public class Circle implements Shape {

    @Override
    public void draw() {
        // TODO Auto-generated method stub
        System.out.println("我画一个圆形");
    }

}
View Code
技术分享图片
public class Red implements Color{

    @Override
    public void fill() {
        // TODO Auto-generated method stub
        System.out.println("我是红色");
    }

}
View Code
技术分享图片
import cn.ac.bcc.factory.Color;

public class Green implements Color {

    @Override
    public void fill() {
        // TODO Auto-generated method stub
        System.out.println("我是绿色");
    }

}
View Code

2)创建抽象工厂并声明两个方法  形状工厂的方法和颜色工厂的方法

技术分享图片
/**
 * 定义抽象工厂类
 * @author Administrator
 *
 */
public abstract class Factory {
    //声明两个工厂类方法
    public abstract Shape getShape(String shapeType);
    public abstract Color getColor(String colorType);
}
View Code

3)实现形状工厂和颜色工厂  工厂内部实现创建形状和颜色的实例方法

技术分享图片
package cn.ac.bcc.factory;

import cn.ac.bcc.factory.impl.Blue;
import cn.ac.bcc.factory.impl.Green;
import cn.ac.bcc.factory.impl.Red;

public class ColorFactory extends Factory{

    @Override
    public Shape getShape(String shapeType) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Color getColor(String colorType) {
        // TODO Auto-generated method stub
        if(colorType==null){
            return null;
        }
        if(colorType.equals("red")){
            return new Red();
        }
        
        if(colorType.equals("green")){
            return new Green();
        }
        
        if(colorType.equals("blue")){
            return new Blue();
        }
        return null;
    }

}
View Code
技术分享图片
package cn.ac.bcc.factory;

import cn.ac.bcc.factory.impl.Circle;
import cn.ac.bcc.factory.impl.Square;
import cn.ac.bcc.factory.impl.Triangle;
/**
 * 定义一个形状工厂
 * @author Administrator
 *
 */
public class ShapeFactory extends Factory{
    /**
     * 获取形状方法  
     * @param shapeType  要获得的形状名称
     * @return
     */
    public  Shape getShape(String shapeType){
        
        if(shapeType == null){
            return null;
        }
        
        if(shapeType.equals("circle")){
            return new Circle();
        }
        
        if(shapeType.equals("triangle")){
            return new Triangle();
        }
        
        if(shapeType.equals("square")){
            return new Square();
        }
        
        return null;
    }

    @Override
    public Color getColor(String colorType) {
        // TODO Auto-generated method stub
        return null;
    }

    


}
View Code

4)创建一个工厂创造器 用来创建工厂实例

技术分享图片
public class FactoryProvider {
    
    public static Factory getAbstractFactory(String factoryName){
        
        if(factoryName.equals("shape")){
            return new ShapeFactory();
        }
        if(factoryName.equals("color")){
            return new ColorFactory();
        }
        return null;
        
    }

}
View Code

5)测试实现

技术分享图片
import cn.ac.bcc.factory.Color;
import cn.ac.bcc.factory.Factory;
import cn.ac.bcc.factory.FactoryProvider;
import cn.ac.bcc.factory.Shape;

public class FactoryTest {

    public static void main(String[] args) {
        
        //通过工厂提供类获取相应的工厂类
        Factory shapeFactory = FactoryProvider.getAbstractFactory("shape");
        //通过形状工厂类获取指定的形状
        Shape shape = shapeFactory.getShape("circle");
        shape.draw();
        
        Factory colorFactory = FactoryProvider.getAbstractFactory("color");
        Color color = colorFactory.getColor("red");
        color.fill();
    }
}
View Code

 

以上是关于设计模式之抽象工厂的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之抽象工厂模式

创建型模式之抽象工厂模式实例及代码操作

设计模式探秘之抽象工厂模式

设计模式之简单工厂工厂方法抽象工厂

设计模式之抽象工厂模式

设计模式之抽象工厂模式