首页 > 其他分享 >工厂模式笔记

工厂模式笔记

时间:2023-05-04 23:36:11浏览次数:51  
标签:return String 模式 工厂 Shape 笔记 new circle class

参考教程

主要参考了 抽象工厂模式工厂模式-简单工厂、工厂方法、抽象工厂解析

代码部分

要生产的产品

package fun.seolas.factory.simple;

public class Product {
}

/**
 * 形状产品
 */
interface Shape {
    void draw();
}

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

class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("square");
    }
}


/**
 * 颜色产品
 */
interface Color {
    void fill();
}

class Red implements Color {
    @Override
    public void fill() {
        System.out.println("red");
    }
}

class Bule implements Color {
    @Override
    public void fill() {
        System.out.println("blue");
    }
}

简单工厂模式

package fun.seolas.factory.simple;

/**
 * 简单工厂模式:
 * 只提供传入工厂的参数,由工厂来创建对象
 */
public class SimpleFactoryDemo {
    public static void main(String[] args) {
        ShapeFactory shapeFactory = new ShapeFactory();
        Shape circle = shapeFactory.getShape("circle");
        circle.draw();
    }
}

class ShapeFactory {
    Shape getShape(String shape) {
        if ("circle".equals(shape)) {
            return new Circle();
        } else if ("square".equals(shape)) {
            return new Square();
        }
        return null;
    }
}

工厂方法模式

package fun.seolas.factory.method;

/**
 * 工厂方法模式:
 * 不传参数了,一个工厂生产指定的产品
 */
public class FactoryMethodDemo {
    public static void main(String[] args) {
        CircleFactory circleFactory = new CircleFactory();
        Shape circle = circleFactory.getShape();
        circle.draw();
    }
}

abstract class ShapeFactory {
    abstract Shape getShape();
}

class CircleFactory extends ShapeFactory {
    @Override
    Shape getShape() {
        return new Circle();
    }
}

class SquareFactory extends ShapeFactory {
    @Override
    Shape getShape() {
        return new Square();
    }
}

抽象工厂模式

package fun.seolas.factory.abs;

/**
 * 抽象工厂模式:
 * 传入参数,指定要哪个工厂,再传入参数,生成指定产品
 */
public class AbstractFactoryDemo {
    public static void main(String[] args) {
        AbstractFactory shapeFactory = FactoryProducer.getFactory("shape");
        Shape circle = shapeFactory.getShape("circle");
        circle.draw();
    }
}

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

abstract class AbstractFactory {
    abstract Shape getShape(String shape);

    abstract Color getColor(String color);
}

class ShapeFactory extends AbstractFactory {
    @Override
    Shape getShape(String shape) {
        if ("circle".equals(shape)) {
            return new Circle();
        } else if ("square".equals(shape)) {
            return new Square();
        }
        return null;
    }

    @Override
    Color getColor(String color) {
        return null;
    }
}


class ColorFactory extends AbstractFactory {
    @Override
    Shape getShape(String shape) {
        return null;
    }

    @Override
    Color getColor(String color) {
        if ("red".equals(color)) {
            return new Red();
        } else if ("blue".equals(color)) {
            return new Bule();
        }
        return null;
    }


}

标签:return,String,模式,工厂,Shape,笔记,new,circle,class
From: https://www.cnblogs.com/seolas/p/17372869.html

相关文章

  • Django笔记三十五之admin后台界面介绍
    本文首发于公众号:Hunter后端原文链接:Django笔记三十五之admin后台界面介绍这一篇介绍一下Django的后台界面使用。Django自带了一套后台管理界面,可用于我们直接操作数据库数据,本篇笔记目录如下:创建后台账号以及登录操作注册后台显示的数据表列表字段的显示操作字段值......
  • 【动手学深度学习】第十二章笔记:异步计算、数据并行
    为了更好的阅读体验,请点击这里12.1编译器和解释器原书主要关注的是命令式编程(imperativeprogramming)。Python是一种解释性语言,因此没有编译器给代码优化,代码会跑得很慢。12.1.1符号式编程考虑另一种选择符号式编程(symbolicprogramming),即代码通常只在完全定义了过程之后才......
  • 【C++学习笔记】类的长度
    //空类长度是1由于可以初始化,所以必须有一个长度1class空类{}//一个函数长度是1其实函数不占长度,多个函数,长度还是为1,为了初始化,必须有一个长度。class一个函数{voidTest();}//一个虚函数类由于有一个虚函数表,所以必须长度为4,多个虚函数,也是4class一个虚函数类......
  • NTT笔记
    NTT笔记前言:这个算法是与FFT类似的,本片不会再从头讲起,建议先去补补课《FFT笔记》。本文只会讲一下互相关联的地方与一些不同的地方。建议:在电脑前放好演算纸和笔。注:本篇文章是我这个小蒟弱写的,真正的dalao请看个玩笑便好,不必争论对错(但是欢迎指出文章存在的小错误)。NT......
  • 「学习笔记」可持久化线段树
    可持久化数据结构(Persistentdatastructure)总是可以保留每一个历史版本,并且支持操作的不可变特性(immutable)。主席树全称是可持久化权值线段树,给定\(n\)个整数构成的序列\(a\),将对于指定的闭区间\(\left[l,r\right]\)查询其区间内的第\(k\)小值。可持久化线段......
  • STL源码分析读书笔记
    主要是关于标准库容器的整理空间配置器主要看SGI的实现,有两个空间配置器_malloc_alloc_template<0>__default_alloc_template<...>用户可以选择单独使用第一个分配器,或者一起使用两个分配器。当用户选择使用两个分配器时,编译器会分别将上述两个分配器typedef成malloc_a......
  • Java设计模式-建造者模式
    简介建造者模式是一种创建型设计模式,用于将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通过将复杂对象的构建过程分解为多个简单的步骤来实现。与其他创建型模式不同,建造者模式强调的是将构建过程与表示分离,而不是将对象与其构建方式分离......
  • 23.4.24前学习笔记
    可通过document.documentElement.scrollTop=0控制返回页面顶部 scrollTo方法 window.scrollTo(x,y)//控制页面移动到哪  页面尺寸事件 window.addEventListener('resize',function(){    //改变屏幕尺寸时发生变化,可代替媒体查询    letw=documen......
  • Java学习笔记(九)
    1、代理模式的概念可以为其它对象提供一种代理以控制对这个对象的访问,屏蔽对真实角色的直接访问。2、为什么要重写toString()方法?默认情况下,toString()方法返回的字符串是由对象的类名、“@”符号和对象的哈希码组成的。我们需要重写toString()方法,以便返回更有意义和有用的字......
  • vue-esign 学习笔记
    1注意事项最新版是1.1.4,我们项目组用的是1.1.0。从npmjs可以看出,两个版本中间的版本都是不可用的,下载量为0.除此之外还可以参考的类似工具:https://www.npmjs.com/package/vue-esignaturevue-esignaturehttps://www.npmjs.com/package/vue3-esignvue3-esign2链接地址http......