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

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

    代码实现:

    为形状创建一个接口:

    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

  • 相关阅读:
    javaweb基础(6)_servlet配置参数
    javaweb基础(5)_servlet原理
    读书笔记:java特种兵(上)
    基础算法(四):海量数据的处理方法
    基础算法(三)动态规划和贪心算法
    基础算法(二):堆排序,快速排序
    基本算法(一):插入排序,归并排序
    JVM基础和调优(六)
    JVM基础和调优(五)
    JVM基础和调优(四)
  • 原文地址:https://www.cnblogs.com/51life/p/9617421.html
Copyright © 2011-2022 走看看