• 抽象工厂模式


    抽象工厂模式的目的是提供一个创建一系列相关或者相互依赖的对象的接口,而无需指定他们具体的类。

    代码实现:

    为形状创建一个接口:

    public interface Shape {
        void draw();
    }

    创建Shape接口的实现类:

    public class Rectangle implements Shape{
        @Override
        public void draw() {
            System.out.println("Shape:Rectangle");
        }
    }
    public class Circle implements Shape{
        @Override
        public void draw() {
            System.out.println("Shape:Circle");
        }
    }

    为颜色创建一个接口:

    public interface Color {
        void fill();
    }

    创建Color的实现类:

    public class Red implements Color{
        public void fill() {
            System.out.println("Color:Red");
        }
    }
    public class Green implements Color{
        public void fill() {
            System.out.println("Color:Green");
        }
    }

    为Shape和Color创建抽象类工厂来获取对象

    public abstract class AbstractFactory {
        public abstract Shape getShape(String shape);
        public abstract Color getColor(String color);
    }

    创建实现了AbstractFactory的工厂类,来获取Shap和Color对象

    public class ShapeFactory extends AbstractFactory{
    
        @Override
        public Shape getShape(String shapeType) {
            if(shapeType == null){
                return null;
            }
            if(shapeType.equals("rectangle")){
                return new Rectangle();
            }else if(shapeType.equals("circle")){
                return new Circle();
            }
            
            return null;
        }
    
        @Override
        public Color getColor(String colorType) {
            return null;
        }
    
    }
    public class ColorFactory extends AbstractFactory{
    
        @Override
        public Shape getShape(String shapeType) {
            return null;
        }
    
        @Override
        public Color getColor(String colorType) {
            if(colorType==null){
                return null;
            }
            
            if(colorType.equals("red")){
                return new Red();
            }else if(colorType.equals("green")){
                return new Green();
            }
            
            return null;
        }
    
    }

    创建工厂生成器类,来获取ColorFactory和ShapeFactory:

    public class FactoryProducer {
        public static AbstractFactory getFactory(String choice){
            if(choice.equals("color")){
                return new ColorFactory();
            }else if(choice.equals("shape")){
                return new ShapeFactory();
            }
            return null;
        }
    }

    运行客户端代码:

    public class ClientDemo {
        
        public static void main(String[] args) {
            //获取形状工厂
            ShapeFactory shapeFactory = (ShapeFactory) FactoryProducer.getFactory("shape");
            Shape shape = shapeFactory.getShape("circle");
            shape.draw();
            //获取颜色工厂
            ColorFactory colorFactory = (ColorFactory) FactoryProducer.getFactory("color");
            Color color = colorFactory.getColor("red");
            color.fill();
        }
        
    }

    运行结果:

        Shape:Circle  

        Color:Red

  • 相关阅读:
    §6 矢量在轴上的投影(射影)
    3§5 点与直线的位置关系
    第十八章 机械振动基础
    第五章摩擦平衡问题
    矩阵论基础 3.4线性方程组的解
    第三章 平面与空间直线
    第九章点的复合运动
    §3 两平面的相关位置
    3§7 直线与平面的位置关系
    第十七章 碰撞
  • 原文地址:https://www.cnblogs.com/51life/p/9617421.html
Copyright © 2020-2023  润新知