精华内容
下载资源
问答
  • 2018-09-25 20:55:03

    一,Heat模板结构

    Heat的模版是Heat的核心。

    1,模板格式

        Heat 目前支持两种格式的模板,一种是基于 JSON 格式的 CFN 模板;另外一种是基于 YAML 格式的 HOT 模板。

        CFN 模板主要是为了保持对 AWS 的兼容性。HOT 模板是 Heat 自有的,资源类型更加丰富,更能体现出 Heat 特点的模板。

        此处只涉及HOT( Heat Orchestration Template)模板。

    2,模板组成

    典型的 HOT 模板由下列元素构成:

    模板版本、模板描述、参数组列表、参数列表、资源列表、输出列表、声明条件。

    heat_template_version: 2016-10-14

    description:

      # a description of the template

    parameter_groups:

      # a declaration of input parameter groups and order

    parameters:

      # declaration of input parameters

    resources:

      # declaration of template resources

    outputs:

      # declaration of output parameters

    conditions:

      # declaration of conditions

    元素说明:

    1)heat_template_version: 必填字段,指定对应的模板版本,Heat会根据版本进行检验。

    2)description: 选填字段,用于模板的描述

    3)parameter_groups: 选填字段,允许指定如何对输入参数进行分组,以及提供参数的顺序。

    4)parameters: 选填字段,指输入参数列表。允许指定实例化模板时必须提供的输入参数。这些参数通常用于部署时的每个自定义值(例如,设置自定义用户名或密码)。每个参数都在一个独立的嵌套块中指定,该嵌套块具有第一行中定义的参数的名称和其他属性,如嵌套元素定义的类型或默认值。

    5)resources: 必填字段,指生成的 Stack 所包含的各种资源,比如服务器、卷、对象、存储和网络资源。可以定义资源间的依赖关系。

    6)outputs: 选填字段,指生成的 Stack 暴露出来的信息,可以用来给用户使用,也可以用来作为输入提供给其它的 Stack。

    7)conditions: 选填字段,定义了一个或多个条件,这些条件根据用户创建或更新stack时提供的输入参数值进行评估。条件可以与资源、资源属性和输出相关联。

     

    3,模板resources元素结构

    resources:

      <resource ID>:

        type: <resource type>

        properties:

          <property name>: <property value>

        metadata:

          <resource specific metadata>

        depends_on: <resource ID or list of ID>

        update_policy: <update policy>

        deletion_policy: <deletion policy>

        external_id: <external resource ID>

        condition: <condition name or expression or boolean>

     

    resources元素的key值当中,除了resource ID和type两个必选项外,其它都是可选项。

    properties也是可选项。

    (不同的properties有不同的可选项和必选项,例如OS::Nova::Server类型的properties就有必选项和可选项,因此如果使用OS::Nova::Server,则properties不能为空)。

    具体参考:https://docs.openstack.org/heat/latest/template_guide/openstack.html

     

    4,HOT模板举例-部署一个简单实例

    heat_template_version: 2015-04-30  # heat模板版本必须有
    
    description: #描述项是可选的,建议添加详细描述
    
    resources:  # resources选项是必须的
    
      my_instance:
    
        type: OS::Nova::Server
    
        properties:
    
          key_name: my_key
    
          image: ubuntu-trusty-x86_64
    
          flavor: m1.small

     

    5,模板举例-使用parameters参数

    heat_template_version: 2015-04-30
    
    description: Simple template to deploy a single compute instance
    
    parameters:
    
      image_id:
    
        type: string
    
        label: Image ID
    
        description: Image to be used for compute instance
    
      flavor:
    
        type: string
    
        label: Instance Type
    
        description: Type of instance (flavor) to be used
    
        default: m1.small  # 如果用户没有为参数定义值,则在stack部署期间使用默认值。 如果模板没有为参数定义默认值,那么用户必须定义该值,否则stack创建失败。
    
        constraints:
    
          - allowed_values: [ m1.medium, m1.large, m1.xlarge ] # 约束列表限制输入参数的值
    
            description: Value must be one of m1.medium, m1.large or m1.xlarge.
    
    resources:
    
      my_instance:
    
        type: OS::Nova::Server
    
        properties:
    
          image: { get_param: image_id }
    
          flavor: { get_param: flavor }
    
    

     

    二,Heat功能应用

     

    1,stack核心命令

    heat stack-create / openstack stack create

    heat stack-update / openstack stack update

    heat stack-list / openstack stack list

    heat stack-show / openstack stack show

    heat stack-delete / openstack stack delete

    heat output-list / openstack stack output list

    heat output-show / openstack stack output show

     

    2,stack其它命令

     

    heat stack-abandon / openstack stack abandon

    heat stack-adopt / openstack stack adopt

    heat stack-cancel-update / openstack stack update cancel

    heat stack-preview / openstack stack update --dry-run

    heat action-check / openstack stack check

    heat action-resume / openstack stack resume

    heat action-suspend / openstack stack suspend

    heat hook-clear / openstack stack hook clear

    heat hook-poll / openstack stack hook poll

     

    3,resource相关命令

    heat resource-list / openstack stack resource list

    heat resource-metadata / openstack stack resource metadata show

    heat resource-show / openstack stack resource show

    heat resource-signal / openstack stack resource signal

    heat resource-type-list / openstack orchestration resource type list

    heat resource-type-show / openstack orchestration resource type show

     

    4,template相关命令

    heat template-show  / openstack stack template show

    heat template-validate  / openstack stack create --dry-run

    heat template-version-list / openstack orchestration template version list

    heat resource-type-template / openstack orchestration resource type show --format (hot|cfn)

     

    5,event相关命令

    heat event-list / openstack stack event list

    heat event-show / openstack stack event show

     

    6,软件配置命令

    heat config-create / openstack software config create

    heat config-delete / openstack software config delete

    heat config-show / openstack software config show

    heat config-list / openstack software config list

    heat deployment-create / openstack software deployment create

    heat deployment-delete / openstack software deployment delete

    heat deployment-list / openstack software deployment list

    heat deployment-metadata-show / openstack software deployment metadata show

    heat deployment-output-show / openstack software deployment output show

    heat deployment-show / openstack software deployment show

     

    7,stack快照命令

    heat stack-restore / openstack stack snapshot restore

    heat stack-snapshot / openstack stack snapshot create

    heat snapshot-delete / openstack stack snapshot delete

    heat snapshot-list / openstack stack snapshot list

    heat snapshot-show / openstack stack snapshot show

     

    8,其它命令

    heat build-info / openstack orchestration build-info

    heat service-list / openstack service list (need to integrate with existing command)

     

    常见操作链接:

    https://docs.openstack.org/python-heatclient/latest/cli/index.html

    https://specs.openstack.org/openstack/heat-specs/specs/mitaka/python-openstackclient.html

    更多相关内容
  • ionic应用实用模板

    2015-12-17 00:16:45
    基于ionic tabs模板应用修改而来 更符合实际业务需求
  • 源码分析模板方法模式的典型应用 Servlet 中的模板方法模式 Mybatis BaseExecutor接口中的模板方法模式 模板方法模式 在程序开发中,经常会遇到这种情况:某个方法要实现的算法需要多步骤,但其中有一些步骤是...

    本文的主要内容:

    • 介绍模板方法模式
    • 源码分析模板方法模式的典型应用
      • Servlet 中的模板方法模式
      • Mybatis BaseExecutor接口中的模板方法模式

    模板方法模式

    在程序开发中,经常会遇到这种情况:某个方法要实现的算法需要多个步骤,但其中有一些步骤是固定不变的,而另一些步骤则是不固定的。为了提高代码的可扩展性和可维护性,模板方法模式在这种场景下就派上了用场。

    譬如制作一节网课的步骤可以简化为4个步骤:

    1. 制作PPT
    2. 录制视频
    3. 编写笔记
    4. 提供课程资料

    其中1、2、3的动作在所有课程中的固定不变的,步骤3可有可无,步骤4在每个课程都不同(有些课程需要提供源代码,有些需要提供图片文件等)

    我们可以在父类中确定整个流程的循序,并实现固定不变的步骤,而把不固定的步骤留给子类实现。甚至可以通过一个钩子方法,让子类来决定流程中某个方法的执行与否

    示例.模板方法模式

    模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。

    角色

    AbstractClass(抽象类):在抽象类中定义了一系列基本操作(PrimitiveOperations),这些基本操作可以是具体的,也可以是抽象的,每一个基本操作对应算法的一个步骤,在其子类中可以重定义或实现这些步骤。同时,在抽象类中实现了一个模板方法(Template Method),用于定义一个算法的框架,模板方法不仅可以调用在抽象类中实现的基本方法,也可以调用在抽象类的子类中实现的基本方法,还可以调用其他对象中的方法。

    ConcreteClass(具体子类):它是抽象类的子类,用于实现在父类中声明的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中已经实现的具体基本操作。

    一个模板方法是定义在抽象类中的、把基本操作方法组合在一起形成一个总算法或一个总行为的方法。这个模板方法定义在抽象类中,并由子类不加以修改地完全继承下来。模板方法是一个具体方法,它给出了一个顶层逻辑框架,而逻辑的组成步骤在抽象类中可以是具体方法,也可以是抽象方法。

    基本方法是实现算法各个步骤的方法,是模板方法的组成部分。基本方法又可以分为三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)。

    • 抽象方法:一个抽象方法由抽象类声明、由其具体子类实现。
    • 具体方法:一个具体方法由一个抽象类或具体类声明并实现,其子类可以进行覆盖也可以直接继承。
    • 钩子方法:可以与一些具体步骤 “挂钩” ,以实现在不同条件下执行模板方法中的不同步骤

    示例

    所以我们通过模板方法模式,在抽象类中把整个流程固定下来,其中1、2、3的实现在抽象类中完成,3的执行与否则由子类通过钩子方法来控制,4则由子类来实现

    抽象类定义如下:

    public abstract class ACourse {
    
        protected final void makeCourse() {
            this.makePPT();
            this.makeVideo();
            if (needWriteArticle()) {
                this.writeArticle();
            }
            this.packageCourse();
        }
    
        final void makePPT() {
            System.out.println("1. 制作PPT");
        }
    
        final void makeVideo() {
            System.out.println("2. 制作视频");
        }
    
        final void writeArticle() {
            System.out.println("3. 编写课程笔记");
        }
    
        //钩子方法
        protected boolean needWriteArticle() {
            return false;
        }
    
        abstract void packageCourse();
    }
    

    其中的 makeCourse 方法是模板方法,它定义了制作网课的基本流程,makePPTmakeVideowriteArticle 这三个步骤在所有课程中都是固定的,所以用 final 关键字修饰;packageCourse 方法在所有课程中都可能不一样,所以声明为抽象方法,由子类自行实现;钩子方法 needWriteArticle 返回一个 boolean 类型的值,控制是否编写课程笔记

    子类 JavaCourse,实现了抽象方法 packageCourse,重写了钩子方法 needWriteArticle

    public class JavaCourse extends ACourse {
        @Override
        void packageCourse() {
            System.out.println("4. 提供Java课程源代码");
        }
    
        @Override
        protected boolean needWriteArticle() {
            return true;
        }
    }
    

    子类 FECourse,实现了抽象方法 packageCourse,重写了钩子方法 needWriteArticle,其中把钩子方法的结果交给客户端确定

    public class FECourse extends ACourse {
        private boolean needWriteArticleFlag = false;
        @Override
        void packageCourse() {
            System.out.println("4.1 提供课程的前端代码");
            System.out.println("4.2 提供课程的图片等多媒体素材");
        }
    
        public FECourse(boolean needWriteArticleFlag) {
            this.needWriteArticleFlag = needWriteArticleFlag;
        }
    
        @Override
        protected boolean needWriteArticle() {
            return this.needWriteArticleFlag;
        }
    }
    

    客户端测试

    public class Test {
        public static void main(String[] args) {
            System.out.println("Java课程start---");
            ACourse javaCourse = new JavaCourse();
            javaCourse.makeCourse();
            System.out.println("Java课程end---\n");
    
    
            System.out.println("前端课程start---");
            ACourse feCourse = new FECourse(false);
            feCourse.makeCourse();
            System.out.println("前端课程end---");
        }
    }
    

    输出结果

    Java课程start---
    1. 制作PPT
    2. 制作视频
    3. 编写笔记
    4. 提供Java课程源代码
    Java课程end---
    
    前端课程start---
    1. 制作PPT
    2. 制作视频
    4.1 提供课程的前端代码
    4.2 提供课程的图片等多媒体素材
    前端课程end---
    

    它们的类图如下

    示例.模板方法模式

    模板方法模式总结

    模板方法模式的主要优点如下:

    • 在父类中形式化地定义一个算法,而由它的子类来实现细节的处理,在子类实现详细的处理算法时并不会改变算法中步骤的执行次序。
    • 模板方法模式是一种代码复用技术,它在类库设计中尤为重要,它提取了类库中的公共行为,将公共行为放在父类中,而通过其子类来实现不同的行为,它鼓励我们恰当使用继承来实现代码复用。
    • 可实现一种反向控制结构,通过子类覆盖父类的钩子方法来决定某一特定步骤是否需要执行。
    • 在模板方法模式中可以通过子类来覆盖父类的基本方法,不同的子类可以提供基本方法的不同实现,更换和增加新的子类很方便,符合单一职责原则和开闭原则。

    模板方法模式的主要缺点如下:

    • 需要为每一个基本方法的不同实现提供一个子类,如果父类中可变的基本方法太多,将会导致类的个数增加,系统更加庞大,设计也更加抽象,此时,可结合桥接模式来进行设计。

    适用场景

    • 对一些复杂的算法进行分割,将其算法中固定不变的部分设计为模板方法和父类具体方法,而一些可以改变的细节由其子类来实现。即:一次性实现一个算法的不变部分,并将可变的行为留给子类来实现。
    • 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
    • 需要通过子类来决定父类算法中某个步骤是否执行,实现子类对父类的反向控制。

    源码分析模板方法模式的典型应用

    Servlet 中的模板方法模式

    Servlet(Server Applet)是Java Servlet的简称,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。在每一个 Servlet 都必须要实现 Servlet 接口,GenericServlet 是个通用的、不特定于任何协议的Servlet,它实现了 Servlet 接口,而 HttpServlet 继承于 GenericServlet,实现了 Servlet 接口,为 Servlet 接口提供了处理HTTP协议的通用实现,所以我们定义的 Servlet 只需要继承 HttpServlet 即可。

    HttpServlet的继承关系

    HttpServlet 的简要代码如下所示

    public abstract class HttpServlet extends GenericServlet {
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // ...
        }
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // ...
        }
        protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // ...
        }
        protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // ...
        }
        protected void doDelete(HttpServletRequest req,  HttpServletResponse resp) throws ServletException, IOException {
            // ...
        }
        protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // ...
        }
        protected void doTrace(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // ...
        }
        
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String method = req.getMethod();
    
            if (method.equals(METHOD_GET)) {
                long lastModified = getLastModified(req);
                if (lastModified == -1) {
                    // servlet doesn't support if-modified-since, no reason
                    // to go through further expensive logic
                    doGet(req, resp);
                } else {
                    long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
                    if (ifModifiedSince < lastModified) {
                        // If the servlet mod time is later, call doGet()
                        // Round down to the nearest second for a proper compare
                        // A ifModifiedSince of -1 will always be less
                        maybeSetLastModified(resp, lastModified);
                        doGet(req, resp);
                    } else {
                        resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
                    }
                }
    
            } else if (method.equals(METHOD_HEAD)) {
                long lastModified = getLastModified(req);
                maybeSetLastModified(resp, lastModified);
                doHead(req, resp);
    
            } else if (method.equals(METHOD_POST)) {
                doPost(req, resp);
                
            } else if (method.equals(METHOD_PUT)) {
                doPut(req, resp);
                
            } else if (method.equals(METHOD_DELETE)) {
                doDelete(req, resp);
                
            } else if (method.equals(METHOD_OPTIONS)) {
                doOptions(req,resp);
                
            } else if (method.equals(METHOD_TRACE)) {
                doTrace(req,resp);
                
            } else {
                //
                // Note that this means NO servlet supports whatever
                // method was requested, anywhere on this server.
                //
    
                String errMsg = lStrings.getString("http.method_not_implemented");
                Object[] errArgs = new Object[1];
                errArgs[0] = method;
                errMsg = MessageFormat.format(errMsg, errArgs);
                
                resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
            }
        }
        
        // ...省略...
    }
    

    HttpServletservice 方法中,首先获得到请求的方法名,然后根据方法名调用对应的 doXXX 方法,比如说请求方法为GET,那么就去调用 doGet 方法;请求方法为POST,那么就去调用 doPost 方法

    HttpServlet 相当于定义了一套处理 HTTP 请求的模板;service 方法为模板方法,定义了处理HTTP请求的基本流程;doXXX 等方法为基本方法,根据请求方法做相应的处理,子类可重写这些方法;HttpServletRequest 中的Method则起到钩子方法的作用.

    在开发javaWeb应用时,自定义的Servlet类一般都扩展 HttpServlet 类,譬如我们实现一个输出 Hello World!Servlet 如下

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    // 扩展 HttpServlet 类
    public class HelloWorld extends HttpServlet {
    
      public void init() throws ServletException {
        // ...
      }
    
      public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          response.setContentType("text/html");
          PrintWriter out = response.getWriter();
          out.println("<h1>Hello World!</h1>");
      }
      
      public void destroy() {
          // ...
      }
    }
    

    该自定义的 Servlet 重写了 doGet 方法,当客户端发起 GET 请求时将得到 <h1>Hello World!</h1>

    Mybatis BaseExecutor接口中的模板方法模式

    Executor 是 Mybatis 的核心接口之一,其中定义了数据库操作的基本方法,该接口的代码如下:

    public interface Executor {
    
      ResultHandler NO_RESULT_HANDLER = null;
      // 执行 update、insert、delete 三种类型的SQL语句
      int update(MappedStatement ms, Object parameter) throws SQLException;
      // 执行selete类型的SQL语句,返回值分为结果对象列表或游标对象
      <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey cacheKey, BoundSql boundSql) throws SQLException;
      /
      <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler) throws SQLException;
    
      <E> Cursor<E> queryCursor(MappedStatement ms, Object parameter, RowBounds rowBounds) throws SQLException; 
      // 批量执行SQL语句
      List<BatchResult> flushStatements() throws SQLException;
      // 提交事务
      void commit(boolean required) throws SQLException;
      // 回滚事务
      void rollback(boolean required) throws SQLException;
      // 创建缓存中用到的CacheKey对象
      CacheKey createCacheKey(MappedStatement ms, Object parameterObject, RowBounds rowBounds, BoundSql boundSql);
      // 根据CacheKey对象查找缓存
      boolean isCached(MappedStatement ms, CacheKey key);
      // 清空一级缓存
      void clearLocalCache();
      // 延迟加载一级缓存中的数据
      void deferLoad(MappedStatement ms, MetaObject resultObject, String property, CacheKey key, Class<?> targetType);
      // 获取事务对象
      Transaction getTransaction();
      // 关闭Executor对象
      void close(boolean forceRollback);
      // 检测Executor是否已关闭
      boolean isClosed();
    
      void setExecutorWrapper(Executor executor);
    
    }
    

    Executor 类的类图如下

    Executor与其子类的类图

    BaseExecutor 中主要提供了缓存管理和事务管理的基本功能,继承 BaseExecutor 的子类只需要实现四个基本方法来完成数据库的相关操作即可,这四个方法分别是:doUpdate() 方法、doQuery() 方法、doQueryCursor() 方法、doFlushStatement() 方法,其余功能都在 BaseExecutor 中实现。

    BaseExecutor的部分代码如下,其中的 query() 方法首先会创建 CacheKey 对象,并根据 CacheKey 对象查找一级缓存,如果缓存命中则返回缓存中记录的结果对象,如果未命中则查询数据库得到结果集,之后将结果集映射成结果对象并保存到一级缓存中,同时返回结果对象。

    public abstract class BaseExecutor implements Executor {
      protected Transaction transaction;
      protected Executor wrapper;
    
      protected ConcurrentLinkedQueue<DeferredLoad> deferredLoads;
      protected PerpetualCache localCache;
      protected PerpetualCache localOutputParameterCache;
      protected Configuration configuration;
    
      protected int queryStack = 0;
      private boolean closed;
      
      @Override
      public <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLException {
        ErrorContext.instance().resource(ms.getResource()).activity("executing a query").object(ms.getId());
        if (closed) {
          throw new ExecutorException("Executor was closed.");
        }
        if (queryStack == 0 && ms.isFlushCacheRequired()) {
          clearLocalCache();
        }
        List<E> list;
        try {
          queryStack++;
          list = resultHandler == null ? (List<E>) localCache.getObject(key) : null;
          if (list != null) {
            handleLocallyCachedOutputParameters(ms, key, parameter, boundSql);
          } else {
            list = queryFromDatabase(ms, parameter, rowBounds, resultHandler, key, boundSql);
          }
        } finally {
          queryStack--;
        }
        if (queryStack == 0) {
          for (DeferredLoad deferredLoad : deferredLoads) {
            deferredLoad.load();
          }
          // issue #601
          deferredLoads.clear();
          if (configuration.getLocalCacheScope() == LocalCacheScope.STATEMENT) {
            // issue #482
            clearLocalCache();
          }
        }
        return list;
      }
      
      protected abstract int doUpdate(MappedStatement ms, Object parameter)
          throws SQLException;
    
      protected abstract List<BatchResult> doFlushStatements(boolean isRollback)
          throws SQLException;
    
      protected abstract <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql)
          throws SQLException;
    
      protected abstract <E> Cursor<E> doQueryCursor(MappedStatement ms, Object parameter, RowBounds rowBounds, BoundSql boundSql)
          throws SQLException;
    
      // 省略....
    }
    

    BaseExecutor 的子类有四个分别是 SimpleExecotorReuseExecutorBatchExecutorClosedExecutor,由于这里使用了模板方法模式,一级缓存等固定不变的操作都封装到了 BaseExecutor 中,因此子类就不必再关心一级缓存等操作,只需要专注实现4个基本方法的实现即可。

    这里对这四个子类的功能做一个简要的介绍:

    • SimpleExecutor 是Mybatis执行Mapper语句时默认使用的 Executor,提供最基本的Mapper语句执行功能,没有过多的封装的
    • ReuseExecutor 提供了 Statement 重用的功能,通过 statementMap 字段缓存使用过的 Statement 对象进行重用,可以减少SQL预编译以及创建和销毁 Statement 对象的开销,从而提高性能
    • BatchExecutor 实现了批处理多条SQL语句的功能,在客户端缓存多条SQL并在合适的时机将多条SQL打包发送给数据库执行,从而减少网络方面的开销,提升系统的性能
    • ClosedExecutor 只是某个类的一个内部类

    参考:
    刘伟:设计模式Java版
    慕课网java设计模式精讲 Debug 方式+内存分析
    徐郡明:Mybatis技术内幕 3.6 Executor

    更多内容可访问我的个人博客:http://laijianfeng.org

    关注【小旋锋】微信公众号

    推荐阅读

    设计模式 | 简单工厂模式及典型应用
    设计模式 | 工厂方法模式及典型应用
    设计模式 | 抽象工厂模式及典型应用
    设计模式 | 建造者模式及典型应用
    设计模式 | 原型模式及典型应用
    设计模式 | 外观模式及典型应用
    设计模式 | 装饰者模式及典型应用
    设计模式 | 适配器模式及典型应用
    设计模式 | 享元模式及典型应用
    设计模式 | 组合模式及典型应用

    展开全文
  • 2020年20种最佳Android应用程序模板

    千次阅读 2020-06-22 02:51:00
    CodeCanyon上可用的许多Android应用程序模板 CodeCanyon上2020年最畅销的Android应用程序模板 要在2020年进行富有成效的应用程序开发旅程,请抓住这些流行的Android应用程序模板。 我们对CodeCanyon提供的...

    使用应用模板可以使您更快地满足客户的截止日期,因为所有编程工作都已为您完成。 您需要做的就是根据客户的需求构建应用程序。

    City Guide
    CodeCanyon上可用的许多Android应用程序模板之一

    CodeCanyon上2020年最畅销的Android应用程序模板

    要在2020年进行富有成效的应用程序开发旅程,请抓住这些流行的Android应用程序模板之一。 我们对CodeCanyon提供的数千种Android应用模板进行了梳理,以找出今年20种最佳的Android应用模板。

    2020年最畅销的Android App

    这些Android应用程序模板是在Android Studio中制作,使用Material Design并随附有关如何从头开始配置模板的分步说明或视频教程。 他们通常还支持AdMob,可以选择删除横幅广告和插页式广告。

    2020年20种最佳Android应用程序模板

    在本综述中,我将重点介绍CodeCanyon现在可用的最佳Android应用程序模板,以便您可以在2020年构建理想的Android应用程序。

    最佳通用应用程序模板

    1.

    通用Android应用

    公认的最佳和最受欢迎的Android应用程序模板之一是Universal Android App 。 这款出色的应用程序使用户可以通过从博客,时间轴,提要,订阅源,频道,播放列表或网页等来源中提取无限内容,然后轻松地将它们组合到一个可自定义的应用程序中,来创建几乎所需的任何应用程序。 该模板支持最流行的Web内容源,例如WordPress,YouTube,Facebook和RSS。

    2.

    材料设计界面

    Material Design UI是一个酷炫时尚的Android UI模板,具有五个华丽的主题,可用于使您正在从事的任何应用程序项目更具美学吸引力。 模板主题以社交,旅游,媒体和购物应用为目标,并且有一个通用主题,可与各种应用一起使用。 该模板使用了数百个UI元素,这些元素可以无限地重新组合以创建一个美观且外观独特的应用程序。

    3.

    通用Android WebView应用

    使用Universal Android WebView App将您的移动和响应式网站转换为漂亮的应用程序 。 它与WordPress和其他Web框架兼容,可高度自定义并具有许多功能,并且支持HTML5,CSS3,JavaScript,jQuery,Bootstrap和其他Web技术。

    4. MaterialX

    材质X

    MaterialX是一个UI模板,可以支持您要开发的任何应用程序项目。 它经过专门设计,可通过为您提供精美,易于使用的材料来使您的应用看起来令人惊叹,因此无论您要创建哪个应用,都可以在代码中实现它。 功能包括网格,列表和选项卡视图,媒体播放器,社交媒体时间轴,电子商务购物等。

    最佳社交网络应用模板

    5.

    My Social Network

    我的社交网络”内置于Android Studio中,可让您创建自己的个人社交网络应用,您可以在其中发布帖子,阅读好友的帖子,实时与好友进行个人对话等等。

    6.

    约会应用

    如果您想尝试创建自己的在线约会应用程序,那么约会应用程序模板正是您所需要的。 该模板使用Android Studio构建,其显着功能包括漂亮的图库和用户个人资料。 用户具有评论,回复和发送礼物,查看附近的潜在日期,进行应用内购买,发送带有照片的实时直接消息的能力,并且他们当然可以阻止其他用户。

    7. WoWonder Android Messenger

    WoWonder Android Messenger

    寻找一个Messenger应用程式范本来建立您自己的Android Messenger? 别看WoWonder Android Messenger应用程序模板。 WoWonder Mobile Messenger是WoWonder社交网络设计的Android聊天应用程序,允许用户在手机上一起聊天。 其功能包括能够进行音频和视频通话,发送和接收消息,共享和上传图像,进行录音等等。

    最佳定位器和地图应用模板

    8.

    城市

    城市是复杂的空间,任何能帮助当地人和游客导航的应用程序必定会大受欢迎。 对于想要为其城市创建具有最有趣景点和最佳餐厅,咖啡厅,酒吧,商店等等的应用程序的开发人员而言, The City是一个不错的应用程序模板。

    所有应用程序数据都存储在本地SQLite数据库中,因此该应用程序在脱机模式下工作。 该模板具有出色的功能,例如用于显示位置的MapView,用于推荐地点的功能类别,能够过滤搜索,已保存的搜索历史等等。

    9.

    店铺查找器

    您不能在手机上安装商店查找器应用程序。 这种必不可少的特性使Store Finder应用程序模板在开发人员中很受欢迎。 该应用程序采用Android Studio和材质设计制作而成,具有众多必备功能,例如电子邮件和SMS集成,用户评级和评论,Google指导以及社交媒体登录。 用户还可以在地图上绘制,使用地图图钉,共享到Facebook和Twitter等。

    城市指南

    使用“ 城市指南” Android应用模板为您选择的城市创建自己的便捷旅行指南应用。 该模板在Android Studio中开发并使用Material Design进行了样式设置,易于配置和自定义。 它不需要编程技能即可使用。

    您可以将所选的城市亮点归类为景点,体育,酒店和夜生活等类别。 这些选定的突出显示也可以在交互式地图上视为可单击的点,该地图使用地理位置来识别您手机的当前位置和与每个突出显示的距离。

    最佳音乐和视频应用模板

    11. Android直播电视

    Android直播电视

    Android直播电视应用模板可帮助开发人员创建允许最终用户在其Android设备上观看直播电视的应用。 该应用程序提供一个注册/登录屏幕,一个主屏幕和一个导航屏幕,其中显示了该应用程序的所有部分。 频道是按类别组织的,用户可以评论频道或报告频道问题。 该应用程序易于配置,并提供了详细的文档。

    12.

    您的电台应用

    放下CodeCanyon上最好的广播应用模板, 您的广播应用非常适合想要创建自己的移动互联网广播流应用的开发人员。 借助功能强大的管理面板,该应用程序可以管理无限的广播电台和类别,并支持多种格式。

    13.

    您的视频频道

    如果您是YouTuber,摄像师或具有摄像师客户的开发人员,则您的视频频道应用模板可能会吸引您,因为它实质上允许您创建一个专用于展示您的视频或所选视频集的应用。 该应用程序具有YouTube集成功能,在管理端使用PHP MySQL,并且可以管理无限的类别和视频上传。

    14.

    音乐

    xMusic将吸引正在寻找模板以帮助他们创建在线-离线音乐播放器应用程序的Android开发人员。 该应用程序通过SoundCloud API播放了数百万来自SoundCloud的免费歌曲,但如果愿意,可以从用户自己的音乐库中切换到音乐。

    模板提供的一些出色功能是具有许多预设音乐风格的强大均衡器,对睡眠模式和许多播放列表的支持,强大的搜索等等。

    最佳专用应用模板

    15.

    Android新闻应用

    对于希望为Android设备创建移动新闻应用程序的人来说, Android新闻应用程序模板是首选模板。 用户可以查看不同类别的最新新闻,将文章保存为收藏夹,获得有关最新文章的通知等。 它带有易于使用的管理控制台,用于修改新闻类别和其他详细信息。

    16.

    高清壁纸

    HD Wallpaper应用程序模板允许开发人员创建一个向用户的Android设备提供精美壁纸和背景的应用程序。 该应用程序具有多个画廊的高分辨率图像,轻松的点击,滑动和滚动功能以及离线缓存墙纸。

    17. AdForest

    AdForest

    如果您要构建一个应用来管理广告发布业务的产品列表,则AdForest是理想的分类广告应用模板。 该模板具有内置的文本消息传递系统,可方便买卖双方之间的交流。 它带有推播通知,可在广告上显示消息时提醒用户,并且Google Maps集成允许用户获取到卖家的路线。

    18. 电子商务

    电子商务

    如果您想建立在线电子商务业务,并且需要适合您业务的完美Android移动应用程序,请查看电子商务应用程序模板。 它旨在帮助您快速轻松地创建自己的移动电子商务应用程序。 该模板提供了功能强大的管理面板,因此您可以完全根据需要设置所有内容,包括添加货币和​​税金。 您还可以创建类别和产品菜单,并有效地管理订单。

    19.

    Quizix

    Quizix是一个出色的Android测验应用程序模板,它使用数学,文本和/或照片问题,并具有用于两个到四个答案选项的空间。 开发人员只需在后端添加他们的类别,子类别和问题,然后应用程序即可制定测验。 该模板还随附AdMob标语和插页式广告。

    20.

    食谱食谱应用程序

    使用Cookbook Recipe App模板创建自己的食谱应用程序 。 此本地Android应用程序模板不需要编程技能,并且代码易于配置和自定义。 它还将配方存储在本地SQLite数据库中,因此用户可以在没有Internet连接的情况下运行该应用程序。 其他出色的内置功能包括带有类别,购物清单,收藏夹,功能强大的搜索的抽屉式菜单,Google Analytics(分析),各种动画和效果等。

    使用出色的模板启动您的Android应用

    2020年这20种最佳的Android应用程序模板只是我们在CodeCanyon可用的数百种Android应用程序模板中的一小部分,因此,如果它们都不完全符合您的需求,则还有很多其他不错的选择。

    畅销Android应用2020

    Envato Tuts +上的更多Android App模板资源

    而且,如果您想提高构建Android应用程序和模板的技能,请查看我们提供的一些非常有用的Android教程


    翻译自: https://code.tutsplus.com/articles/15-best-android-app-templates-of-2017--cms-29643

    展开全文
  • VS2012 C++/CLR 中Windows窗体应用程序模板补丁

    千次下载 热门讨论 2013-06-09 00:30:29
    Visual Studio 2012中新建C++/CLR项目时,没有了Windows Forms(windows窗体应用程序)模板。此补丁恢复了VS2012对C++/CLR中Windows Forms的支持。 使用方法:解压后,将文件夹下的文件复制到VS2012安装路径下。...
  • 分享200App移动端模板

    千次阅读 2020-06-07 16:25:53
    分享200App移动端文件,总有款适合你! 下面是名字,我放了一些图片,所有图片全都放进去是不行的图太多,大家下载后可以看到。 收集整理不容易老铁支持我动力 APP应用介绍网站模板 APP应用广场CSS网页模板 ...

    链接:https://pan.baidu.com/s/1NjBHqIoq7ORuDfJoR6gOkA  密码:xn6x

    分享200个App移动端文件,总有一款适合你!

    下面是名字,我放了一些图片,所有图片全都放进去是不行的图太多,大家下载后可以看到。

    收集整理不容易老铁支持我动力

    APP应用介绍网站模板
    APP应用广场CSS网页模板
    安卓APP应用展示网站模板
    深绿色手机APP开发模板
    手机APP粉色网站模板
    白色简洁的网站模板
    iPhone5S土豪金网页模板
    黄色风格手机APP官网模板
    绿色APP应用官网模板
    医疗行业企业网站模板
    APP软件官方网站模板
    苹果iPad应用官网模板
    美食DIY应用APP官网模板
    TANKAPP手机应用官网模板
    拍照软件APP开发网站模板
    橙色APP手机客户端网页模板
    情侣应用app开发官网模板
    商务手机APP介绍网站模板
    手机软件设计CSS3模板
    天气app开发网站模板
    手机客户端设计网页模板
    橙色风格手机APP官网模板
    炫彩iPhone6应用官网模板
    手机软件APP官网单页模板
    APP官网展示下载网站模板
    苹果谷歌手机软件官网模板
    桃木风格手机app官网模板
    美食app介绍网站模板
    日历应用app官网网站模板
    跟汽车相关的APP网站模板
    蓝色手机APP功能介绍模板下载
    扁平化APP应用产品官网模板
    监听器软件APP官网模板
    苹果应用APP设计公司模板
    跑步app官网网站模板
    婚纱摄影APP官网模板
    单页手机应用官网模板
    应用APP引导页视频背景模板
    全屏APP开发公司网站模板
    APP开发公司响应式模板
    App项目开发展示网页模板
    手机云APP创意网站模板
    应用官网下载页面模板
    手机app应用开发公司网站模板
    手机app单页HTML5模板
    安卓手机应用APP网站模板
    移动应用APP宣传网页模板
    APPOLLO应用APP下载页模板
    App开发制作公司网站模板
    马桶MT应用APP网站模板
    APP应用制作工作室单页模板
    手机应用APP付费网站模板
    Bootstrap4手机APP网站模板
    APP产品互联网公司网站模板
    刷卡套现app开发HTML5模板
    炫彩移动app官网单页模板
    HTML5和CSS3手机应用模板
    2018春节喜庆APP网站模板
    紫色手机APP网站模板
    手机购物APP网站模板
    App开发互联网公司网站模板
    应用程序宣传页HTML5模板
    蓝色应用程序定制模板
    app制作公司官网响应式模板
    app应用程序设计企业模板
    app产品开发软件网页模板
    app应用统计网站模板
    手机音乐app应用官网模板
    移动APP应用开发公司模板
    紫色APP引导页Bootstrap模板
    通用app软件应用官网模板
    IOS手机App着陆页模板
    手机App应用下载展示页模板
    紫色应用程序设计网站HTML模板
    高端手机软件app介绍网页HTML模板
    大气绿色App UI设计公司网站模板
    大气蓝色应用开发公司CSS3网站HTML模板
    移动App推广网站HTML模板
    简洁app创作团队模板
    蓝色简洁app介绍模板
    app应用介绍响应式模板
    app应用市场介绍模板
    app应用下载介绍模板
    app设计介绍响应式单页模板
    多终端app团队介绍网站模板
    手机app优势介绍bootstrap模板
    手机app功能介绍网站模板
    app单页应用介绍模板
    手机app介绍炫酷bootstrap模板
    旅行app手机网站模板
    设计型app团队介绍html5模板
    创意个性跑车app介绍网站模板
    简洁单页手机app功能介绍模板
    手机app产品特点介绍模板
    简洁app色彩主题网站模板
    app年代发展历程模板
    社交app介绍html5模板
    手机app应用市场单页模板
    网站app设计前端简历模板
    蓝色简洁单页手机app介绍模板
    手机app应用介绍单页网站模板
    手机单页app响应式bootstrap模板
    手机支付app介绍bootstrap模板
    苹果手机app应用单页模板
    蓝色手机app应用介绍单页模板
    iPhone手机app研发团队网页模板
    手机软件公司html5网页模板
    app研发团队企业网站模板
    蓝色手机app单页网站模板
    麦克风音乐app介绍网站模板
    手机应用app单页打车软件模板
    app手机应用开发网站模板
    橙色送礼创意app手机网站模板
    网站app定制开发模板
    亲子旅游app手机网站模板
    风景社交app介绍响应式模板
    粉色单页企业app介绍网站模板
    国内旅游app手机网站模板
    灰色团队响应式bootstrap主题app模板
    黄色手机app应用介绍网站模板
    拉勾网旅游app手机网站模板
    安卓app应用超市手机网站模板
    手机app游戏资讯门户网站模板
    旅游中文手机网站模板
    酒店预定app应用网站模板
    高端苹果手机app应用网页模板
    彩色手机app介绍网站模板
    手机应用app响应式网页模板
    简洁清爽iPhone手机app模板
    苹果手机app应用网页模板
    枪战游戏app主题xbox网站模板
    蜘蛛侠游戏app介绍网站模板
    iphone手机app介绍网页模板
    游戏app应用商店网页模板
    单页手机app展示网页模板
    app手机应用介绍bootstrap模板
    app研发团队bootstrap网页模板
    单页Bootstrap商务app网页模板
    苹果手机app应用网页模板
    应用app展示网页模板
    农业手机app展示网站模板
    苹果手机app应用网站模板
    响应式app设计制作网站模板
    社交互动html5手机网站模板
    安卓应用ui网站模板
    手机app软件应用网站模板
    手机app开发介绍网站模板
    餐饮点餐app下单网站模板
    自然风景app网站模板
    趣味手机app设计网站模板
    app设计开发团队网站模板
    简洁网站app介绍模板
    手机音乐app网站模板
    动漫玩偶响应式app网站模板
    手机app创造者网站模板
    橘色手机app应用下载模板
    苹果手机app应用商店响应式模板
    创意设计app网站模板
    橘色app手机应用响应式模板
    技能介绍响应式网站模板
    服装试穿创意app响应式bootstrap网站模板
    手机地图app响应式bootstrap网站模板
    手机app设计bootstrap网站模板
    社交手机app网站模板
    多平台bootstrap案例展示模板
    邮箱手机app网站模板
    响应式bootstrap手机app模板
    手机app响应式bootstrap网站模板
    地理app介绍网站模板
    app应用响应式bootstrap网站模板
    bootstrap个性手机app网站模板
    手机平板展示网站模板
    bootstrap手机社交app网站模板
    苹果手机app应用网站模板
    汉堡快餐手机app响应式bootstrap模板
    bootstrap手机app网站模拟
    app投资应用网站模板
    手机app售价网站模板
    手机app主页网站模板
    烹饪手机app网站模板
    卡通动漫app下载网站模板
    白色app介绍网站模板
    卡通创意app网站模板
    简洁多平台app展示网站模板
    多平台app产品介绍网站模板
    手机app应用商店模板
    卡通平板app介绍网站模板
    外太空手机app主题html5模板
    app产品介绍单页网站模板
    单页响应式黑色手机app网站模板
    响应式iPhone6手机app网站模板
    手机app种类应用下载网站模板
    响应式天气app主题整站模板
    飞天女警手机app游戏网站模板
    漂亮手机app介绍bootstrap模板
    响应式音乐app单页模板
    响应式炫丽手机app介绍网站模板
    手机app设计者简介单页模板
    iphone手机app商店简洁整站模板
    iPhone手机app单页bootstrap模板
     

    APP应用介绍网站模板

    APP应用广场CSS网页模板

    安卓APP应用展示网站模板

    深绿色手机APP开发模板

    手机APP粉色网站模板

    白色简洁的网站模板

    iPhone5S土豪金网页模板

    黄色风格手机APP官网模板

    绿色APP应用官网模板

    医疗行业企业网站模板

    APP软件官方网站模板

    苹果iPad应用官网模板

     

    美食DIY应用APP官网模板

    TANKAPP手机应用官网模板

    拍照软件APP开发网站模板

    橙色APP手机客户端网页模板

    情侣应用app开发官网模板

    商务手机APP介绍网站模板

    手机软件设计CSS3模板

    天气app开发网站模板

    手机客户端设计网页模板

    橙色风格手机APP官网模板

    炫彩iPhone6应用官网模板

    手机软件APP官网单页模板

    APP官网展示下载网站模板

    苹果谷歌手机软件官网模板

    链接:https://pan.baidu.com/s/1NjBHqIoq7ORuDfJoR6gOkA  密码:xn6x

    展开全文
  • 103套PPT模板.zip

    千次下载 2020-12-05 16:30:34
    读本科常用的100套PPT模板,里面的模板应用于答辩、汇报、经验分享,风格各异,可以根据自己的喜欢进行挑选
  • 模板模板

    万次阅读 多人点赞 2019-07-04 21:10:42
    所谓类模板,实际上是建立一个通用类,其数据成员、成员函数的返回值类型和形参类型不具体指定,用一个虚拟的类型来代表。使用类模板定义对象时,系统会实参的类型来取代类模板中虚拟类型从而实现了不同类的功能。 ...
  • 精美的ppt模板2

    热门讨论 2013-09-18 11:27:19
    右键新建自己的文件先进入C:DocumentsandSettings名Templates文件夹下,右击,选择“新建”→“PowerPoint演示文稿”新建一个PowerPoint文件,再双击宋募缓蠖云渲醒丈⒆痔宓冉凶孕卸ㄒ濉W詈螅≈兴阉拿猵wrpnt10.pot...
  • 模板方法模式在 Spring IOC 容器初始化的时候有所应用,我们看一下 AbstractApplicationContext 中的 refresh 方法,它就是一个模板方法,里面调用了一系列方法,有以实现的具体方法,有未实现的抽象方法,也有空的...
  • Word2016-将一个文档的样式应用到另一个文档

    万次阅读 多人点赞 2018-05-12 13:54:16
    近日接到任务,需要将十几份word文档的格式按照模板进行调整。遇到这种重复性的工作,当然是先上网搜一下有没有批量的解决方法,搜还真的有。下面是我亲测有用的方法以及我的操作过程。1、先拿份word文档A,将...
  • 如何创建一个最简单的Windows桌面应用程序 (C++)

    万次阅读 多人点赞 2017-02-07 13:23:49
    如何创建一个最简单的Windows桌面应用程序 (C++)  最近刚开始学习C/C++开发Windows应用程序,这里将会以零基础的视角学习过程完全记录下来。如果你也刚刚起步,那本文一定非常适合你。  进入正题,本文讨论...
  • 对于教育机构来说,**建设网站**可以带来更好的宣传效果、塑造品牌价值,而应用网站模板又可以大大减轻建站压力
  • 其实是因为前段时间在给一个企业做一个后台管理系统,然后就萌生了造轮子的想法。虽然,已经有很多大佬做出了很多很漂亮、功能丰富的模板,但是因为功能的凝练度太高,导致自己修改起来有些困难。同时有很多新手,...
  • React Native作为制作令人惊叹的移动应用程序(尤其是具有扩展的交互功能的移动应用程序)的最著名JavaScript库之而广受欢迎。 但是,如果您是跨平台的移动开发人员,则很难跟上所有不同的框架。 为什么要使用...
  • C++函数模板模板函数)详解

    万次阅读 多人点赞 2019-07-04 16:03:01
    C++函数模板模板函数)详解定义用法:函数模板的原理延申用法...所有的类模板函数写在类的外部,在一个cpp中2.5总结关于类模板的几点说明:2.6类模板中的static关键字案例2:以下来自:C++类模板遇上static关键字...
  • 精美的ppt模板

    2013-09-18 11:08:23
    右键新建自己的文件先进入C:DocumentsandSettings名Templates文件夹下,右击,选择“新建”→“PowerPoint演示文稿”新建一个PowerPoint文件,再双击宋募缓蠖云渲醒丈⒆痔宓冉凶孕卸ㄒ濉W詈螅≈兴阉拿猵wrpnt10.pot...
  • 1. 准备好.dotm模板文件,放入模板路径 C:\Users\AppData\Roaming\Microsoft\Templates(每人电脑的路径可能不一样,大家用关键字搜索一下即可)2. 打开文档,“开发工具-&gt;文档模板”。选中准备好的.dotm...
  • 试编写一个栈的类模板(包括其成员函数定义),以便为任何类型的对象提供栈结构数据的操作。操作至少包括:入栈和出栈操作。#include &lt;iostream&gt; using namespace std; const int depth=100; ...
  • 模板引擎比较

    千次阅读 2021-02-12 11:25:49
    18.9.3总结:1、FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成...
  • Bootstrap网页模板

    千次阅读 2018-03-03 22:18:02
    创建Bootstrap网页模板只需要两步:第步,安装Bootstrap的样式。只要使用 Bootstrap,就必须调用它的基本样式文件 bootstrap.css。另外,如果需要,可以使用项目的自定义样式 self.css 来覆盖 Bootstrap 的一些...
  • 图像处理(8) : 模板匹配

    千次阅读 多人点赞 2021-06-08 21:47:06
    匹配的主要思路是使用一个目标原型,根据它创建一个模板,在测试图像中搜索与该模板图像最相似的目标,并寻找与该模板的均值或方差最接近的区域。 通过模板匹配可以得到目标的相似度,旋转角度,行列坐标,缩放大小...
  • 一个干净优雅的 Element UI Admin 模板

    千次阅读 2019-09-27 23:02:34
    Element UI Admin 一个干净优雅的Element UI Admin模板 一个大型单页应用离不开合理的项目结构和一些简单的封装 https://github.com/xusenlin/el...
  • 后台模板

    千次阅读 2019-09-06 15:05:10
    最近要做一个企业的OA系统,以前一直使用EasyUI,一切都好,但感觉有点土了,想换成现在流行的Bootstrap为基础的后台UI风格,想满足的条件应该达到如下几个: 1、美观、大方、简洁 2、兼容IE8、不考虑兼容IE6/IE7...
  • Zabbix5.0 创建自定义模板

    千次阅读 2020-06-10 14:26:55
    通过创建自定义监控模板,熟悉监控模板、监控项与监控主机之间的关联。
  • 函数模板的使用

    千次阅读 2021-08-29 21:41:42
    函数模板还是比较强大的,大家都知道函数模板可以增加代码的复用性,提高编程效率。但殊不知函数模板其实还分为三种情况,隐式实例化、显式实例化、显示具体化。下面逐一来说明。 (1)隐式实例化 最常使用的函数...
  • 份完整测试方案模板

    万次阅读 多人点赞 2020-04-19 10:55:37
    份完整测试方案模板 文章目录前言整体架构图1.1 编写目的1.2 项目背景1.3 测试目标1.4 测试参考文档1.5 测试提交文档1.6 术语和缩写语2.1 测试配置要求2.2 测试方法2.3 测试数据2.4 测试策略2.4.1 单元测试2.4.2 ...
  • 有时需要做一个页面,不是设计师出身的我们肯定不想花大量的时间去构思如何设计一个漂亮的页面,那么此时有一些好看又免费的模板就再好不过啦,这里给你们推荐15个 一、React Blur Admin Go to React Blur Admin ...
  • 通用简介的配置模板创建新项目必备的插件配置文件夹改配置文件Django3.0配置文件参数详解自定义模块调试的参数应用的内容前端的模板自定义用户数仓MySQL语言和时区静态文件和媒体文件创建超级用户 创建新项目 在要...
  • 【网页模板】Bootstrap免费模板

    万次阅读 多人点赞 2019-06-14 12:05:39
    Bootstrap是目前最受欢迎也是最简洁的建站方式之一,尤其是伴随移动端的发展,响应式设计已经毫无疑问成为了网页设计的趋势,网站建设要求兼容手机端已经是一种刚需,也成为提升用户...Coming Soon是一个Bootstra...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 728,240
精华内容 291,296
关键字:

怎么把一个模板全部应用