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

  • 相关阅读:
    Android Fragment与Activity通讯详解
    Fragment之间的交互
    理解Fragment的生命周期
    Android 利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果
    【APP UI 设计模式】(一)APP UI 设计原则和流程
    白话经典算法系列之六 高速排序 高速搞定
    究竟什么是推荐?
    Mongo散记--聚合(aggregation)& 查询(Query)
    C/C++程序猿必须熟练应用的开源项目
    PL/SQL连接oracle数据库
  • 原文地址:https://www.cnblogs.com/51life/p/9617421.html
Copyright © 2011-2022 走看看