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

  • 相关阅读:
    ZJNU 1138
    ZJNU 1133
    架构设计:系统存储(21)——图片服务器:详细设计(1)
    架构设计:系统存储(20)——图片服务器:需求和技术选型(2)
    架构设计:系统存储(19)——图片服务器:需求和技术选型(1)
    架构设计:系统存储(18)——Redis集群方案:高性能
    大端模式和小端模式
    阶段性纠错邀请
    架构设计:系统存储(17)——Redis集群方案:高可用
    Android深入浅出之Binder机制
  • 原文地址:https://www.cnblogs.com/51life/p/9617421.html
Copyright © 2011-2022 走看看