zoukankan      html  css  js  c++  java
  • 设计模式(建造者模式)

    建造者模式用于创建相对复杂,组成较多的对象。它包括几类角色:

    • Product: 待被创建的对象,本例中是Table
    • builder:创建对象方法的抽象,本例中是TableBuilder
    • ConcreteBuilder:具体某个创建的实现,本例中是TableBuilderImpl
    • Director:封装builder接口

    类图关系如下:

    代码如下:

    • Table
    package com.example;
    
    public class Table {
        private String head;
        private String content;
        private String footer;
        
        public String getHead() {
            return head;
        }
        public void setHead(String head) {
            this.head = head;
        }
        public String getContent() {
            return content;
        }
        public void setContent(String content) {
            this.content = content;
        }
        public String getFooter() {
            return footer;
        }
        public void setFooter(String footer) {
            this.footer = footer;
        }
        
        public String getTable(){
            return this.head + "_" + this.content + "_" + this.footer;
        }
    }
    • TableBuilder
    public interface TableBuilder {
        public TableBuilder setTableHead(String head);
        public TableBuilder setTableContent(String content);
        public TableBuilder setTableFooter(String footer);
        public Table builder();
    }
    • TableBuilderImpl
    package com.example;
    
    public class TableBuilderImpl implements TableBuilder {
        
        private Table table;
        private static final String TYPE = "TYPE1";
        
        public TableBuilderImpl(){
            table = new Table();
        }
    
        @Override
        public TableBuilder setTableHead(String head) {
            table.setHead(TYPE + head);
            return this;    
        }
    
        @Override
        public TableBuilder setTableContent(String content) {
            table.setContent(TYPE + content);
            return this;
        }
    
        @Override
        public TableBuilder setTableFooter(String footer) {
            table.setFooter(TYPE + footer);
            return this;
        }
    
        @Override
        public Table builder() {
            return table;
        }
    }
    • Director
    public class Director {
        private TableBuilder builder;
        
        public Director(TableBuilder builder){
            this.builder = builder;
        }
        
        public Table Builder(){
            return builder.setTableHead("head")
                    .setTableContent("content")
                    .setTableFooter("footer")
                    .builder();
        }
    }
    • APP
    public class App {
    
        public static void main(String[] args) {
            Director direct = new Director(new TableBuilderImpl());
            Table table = direct.Builder();
            System.out.println(table.getTable());
        }
    }
  • 相关阅读:
    606. Construct String from Binary Tree
    696. Count Binary Substrings
    POJ 3255 Roadblocks (次短路)
    POJ 2823 Sliding Window (单调队列)
    POJ 1704 Georgia and Bob (博弈)
    UVa 1663 Purifying Machine (二分匹配)
    UVa 10801 Lift Hopping (Dijkstra)
    POJ 3281 Dining (网络流之最大流)
    UVa 11100 The Trip, 2007 (题意+贪心)
    UVaLive 4254 Processor (二分+优先队列)
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4571573.html
Copyright © 2011-2022 走看看