zoukankan      html  css  js  c++  java
  • 设计模式之抽象工厂

    抽象工厂使用场景:

       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
  • 相关阅读:
    微软“隐形革命”
    关于董事会绩效评估的思考
    Redis源码分析(二十八)--- object创建和释放redisObject对象
    Redis源码分析(二十七)--- rio系统I/O的封装
    Redis源码分析(二十七)--- rio系统I/O的封装
    实战DeviceIoControl 之一:通过API访问设备驱动程序 分类: windows驱动程序WDM 2013-09-25 14:45 381人阅读 评论(0) 收藏
    马云:超过我只需十到十五年
    如何在不同文化背景下做简报
    Google与沃尔玛的薪酬战略—方法不同,目的一致
    传苹果9月9日发布iPhone 6S
  • 原文地址:https://www.cnblogs.com/lwdmaib/p/9279142.html
Copyright © 2011-2022 走看看